与&符号相关的Python子进程问题
时间:2020-03-06 14:35:43 来源:igfitidea点击:
我目前在python脚本方面遇到重大问题。该脚本通过处理程序运行任意命令,以将错误的错误报告转换为正确的错误报告。
我遇到的问题是使用路径中包含"&"符号的命令来使脚本在Windows上正常工作。我试图引用该命令,并用^来代替"&"号,但两者均无效。我现在没主意了。有什么建议?
为了从当前的答复中弄清楚:
- 我正在使用子流程模块
- 我将命令行和参数作为列表传递
- 问题在于命令本身的路径,而不是任何参数
- 我试过引用命令。导致" [错误123]文件名,目录名或者卷标签语法不正确"错误
- 我没有使用任何shell参数(所以
shell = false
) - 万一重要,我正在抓取一个连接到stderr的管道来处理它,但是忽略了stdout和stdin
- 它目前仅在Windows上使用,并且在到目前为止我测试过的所有其他情况下都可以正常使用。
- 失败的命令是:
p = subprocess.Popen(prog, stderr = subprocess.PIPE, bufsize=-1)
当列表" prog"的第一个元素包含任何"&"号时。引用第一个字符串不起作用。
解决方案
正确的答案将需要更多的信息。你到底在做什么它怎么会失败?我们正在使用子流程模块吗?我们是否要传递参数列表和shell = False(或者没有shell参数),或者我们实际上是在调用shell?
确保我们正在使用列表并且没有外壳扩展:
subprocess.Popen(['command', 'argument1', 'argument2'], shell=False)
尝试引用包含&的参数
wget "http://foo.com/?bar=baz&baz=bar"
通常是在Linux Shell中要做的事情
要回答我自己的问题:
在将参数作为列表传递时,引用实际命令无法正常工作(命令是列表的第一项),因此为了解决此问题,我将列表转换为以空格分隔的字符串,并将其传递给子进程。
仍然欢迎更好的解决方案。
"用^转义与号"
我们确定^
是Windows的转义字符吗?我们不应该使用\
吗?