与&符号相关的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的转义字符吗?我们不应该使用\吗?