当前位置: 首页 > 知识库问答 >
问题:

在Python 3.7中,子流程包含有问题的引号

仲孙子辰
2023-03-14

我在Python3子流程模块中遇到错误。子进程围绕着一些重要的位置参数,我用unicode引号将其括起来,这会导致linux命令find失败。

其他人有这个问题吗?我基本上是想弄清楚这是我这边的配置错误,还是应该把它作为子流程团队的一个问题发布。我相信我可以在我的代码中解决它,但它看起来像一个应该被压扁的错误。

import subprocess
p = subprocess.run(['find', '/.snapshots/*/snapshot', '-maxdepth', '0', '-type', 'd' ], capture_output=True, encoding='utf-8')
print(p)
CompletedProcess(
  args=['find', '/.snapshots/*/snapshot', '-maxdepth', '0', '-type', 'd'], 
  returncode=1,
  stdout='',
  stderr='find: ‘/.snapshots/*/snapshot’: No such file or directory\n'
)

在我看来,子流程正在强制find将路径字符串用unicode引号括起来,而bash只是像find命令一样将这些引号注册为另一个字符。

user@mine:$ find /.snapshots/*/snapshot/ -maxdepth 0 -type d
/.snapshots/1/snapshot/
/.snapshots/2/snapshot/
/.snapshots/3/snapshot/
user@mine:$ find ‘/.snapshots/*/snapshot’ -maxdepth 0 -type d
find: ‘‘/.snapshots/*/snapshot\’’: No such file or directory

引号是unicode的事实不是问题所在。使用find命令(至少在我使用的版本中是这样),您不想通过任何类型的引号包围的路径。即使有一种解决方法使find命令可以使用这种行为,但在等待下一个不需要引号的bash程序时,这似乎仍然是一个问题。

user@mine:$ find '/.snapshots/*/snapshot' -maxdepth 0 -type d
find: '/.snapshots/*/snapshot': No such file or directory

当我第一次遇到这个问题时,我正在运行Python 3.7。4.我进行了更新以查看是否存在修复,因此现在运行的是python 3.8。1.我在Arch Linux上运行,所以我预计这可能是使用仍在测试中的软件的典型痛苦。

共有1个答案

阎德宇
2023-03-14

不要使用glob(shell打算在运行find之前展开glob),而是使用以下命令:

p = subprocess.run(['find', '/.snapshots/', '-path', '*/snapshot', '-maxdepth', '2', '-type', 'd' ], capture_output=True, encoding='utf-8')

-path的参数是一种模式,用于find自身对在/下找到的任何文件进行匹配。快照

 类似资料:
  • 问题内容: 谁可以给我解释一下这个?我下面有两个查询及其结果。 查询 : 结果集 : 赫兹租车 海明威小酒馆 查询 : 结果集 : 没有 第一个查询是我期望的,但是我希望第二个查询返回“ Hertz Car Rental”。我是否从根本上误解了“ *”在全文搜索中的工作方式? 谢谢! 问题答案: 我认为SQL Server会将您的字符串解释为prefix_terms。星号不是普通的旧通配符。全文和

  • 我想在屏幕上只包含SwiedTabs。所以我制作没有TabListeners这样的代码, ` 当我运行这段代码时,我发现总是有错误。但我一次又一次地检查,但我找不到哪里出了问题。我发现许多博客也实现了这样的刷标签,但带有TabListener的片段。但首先,我只想看到屏幕上的选项卡。这里我给出了Logcat中显示的错误 01-20 14:52:12.264: E/AndroidRuntime(12

  • 我正在与以下情况作斗争: 在我们当前运行在Tomcat 7.0.64上的web应用程序中,我们借助自己的类CharrayWriterResponse实现了HttpServletResponseWrapper,通过Java成功地包含了一个JSP页面。 这样做的原因是我们将生成的超文本标记语言包装成AJAX响应所需的JSON。 依赖项: 代码示例: 提示:我没有考虑上述代码示例中的异常处理。 我必须将

  • 问题内容: Golang的新手,并提出了一个看似简单的问题。如果我在项目根目录的main包中有一个logger(并在中定义),那么该如何在子包(即my )中引用该logger ? 我的目录结构是: main.go logger.go routes \ routes.go … 我认为如果Logger是公共的,它已经可以用于路由了,但是我在中得到了“ undefined:Logger” 。而且,如果我

  • 由于某种原因,当使用授权代码流()时,我的令牌配置没有得到尊重。id和auth令牌中都缺少和。 当我使用隐式授予流()时,它按预期工作(和存在于id令牌中)。 配置包括在下面。原因是什么?

  • 问题内容: 我目前无法正常工作的应用程序部分是能够一次滚动浏览并显示一张图像列表。我从用户那里得到一个目录,在该目录中的所有文件中进行后台处理,然后加载仅包含jpeg和png的数组。接下来,我想用第一个图像更新JLabel,并提供上一个和下一个按钮以滚动浏览并依次显示每个图像。当我尝试显示第二张图像时,它没有更新…这是到目前为止我得到的: 我用来更新图像的方法: 然后在我的createAndSho