Python subprocess与&符号的问题
我现在遇到了一个大问题,跟一个Python脚本有关。这个脚本的作用是通过一个处理器运行一些命令,把错误的错误报告转换成正确的错误报告。
我遇到的问题是,脚本在Windows上运行时,如果命令的路径里有“&”这个符号,就无法正常工作。我试过用引号把命令括起来,也试过用“^”来转义这个符号,但都没用。现在我真的想不出其他办法了。有没有什么建议?
为了更清楚地说明目前的情况:
- 我在使用subprocess模块
- 我把命令行和参数作为一个列表传进去
- 问题出在命令的路径上,而不是参数上
- 我试过用引号括住命令,但出现了一个错误:
[Error 123] 文件名、目录名或卷标语法不正确
- 我没有使用shell参数(所以设置为
shell=false
) - 如果这有影响的话,我在处理错误输出时抓取了stderr,但忽略了标准输出和标准输入
- 目前这个脚本只在Windows上使用,在我测试过的其他情况下都能正常工作。
- 出问题的命令是:
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)