Python subprocess与&符号的问题

6 投票
5 回答
6891 浏览
提问于 2025-04-11 09:22

我现在遇到了一个大问题,跟一个Python脚本有关。这个脚本的作用是通过一个处理器运行一些命令,把错误的错误报告转换成正确的错误报告。

我遇到的问题是,脚本在Windows上运行时,如果命令的路径里有“&”这个符号,就无法正常工作。我试过用引号把命令括起来,也试过用“^”来转义这个符号,但都没用。现在我真的想不出其他办法了。有没有什么建议?

为了更清楚地说明目前的情况:

  1. 我在使用subprocess模块
  2. 我把命令行和参数作为一个列表传进去
  3. 问题出在命令的路径上,而不是参数上
  4. 我试过用引号括住命令,但出现了一个错误:[Error 123] 文件名、目录名或卷标语法不正确
  5. 我没有使用shell参数(所以设置为shell=false
  6. 如果这有影响的话,我在处理错误输出时抓取了stderr,但忽略了标准输出和标准输入
  7. 目前这个脚本只在Windows上使用,在我测试过的其他情况下都能正常工作。
  8. 出问题的命令是:

p = subprocess.Popen(prog, stderr = subprocess.PIPE, bufsize=-1)

当列表'prog'的第一个元素包含任何“&”符号时,这个命令就会失败。用引号括住这个字符串也不管用。

5 个回答

0

试着把包含 & 的参数用引号括起来

wget "http://foo.com/?bar=baz&baz=bar"

这通常是在Linux命令行中需要做的事情

0

我来回答我自己的问题:

当我把参数作为列表传递时,直接引用命令并不奏效(因为命令是列表中的第一个项目)。所以为了搞定这个问题,我把列表变成了一个用空格分开的字符串,然后把这个字符串传给了subprocess。

如果有更好的解决方案,欢迎分享。

7

确保你使用的是列表,而不是使用命令行的展开功能:

subprocess.Popen(['command', 'argument1', 'argument2'], shell=False)

撰写回答