Python的子进程问题与&号(Python subprocess issue with amper

2019-09-21 11:12发布

我目前有一个python脚本的一个重大课题。 该脚本通过一个处理程序运行任意命令不正确的错误报告转化为正确的错误报告。

我遇到的问题是如何将脚本与包含&符号在它的路径中的命令在Windows上正常工作。 我已经尝试引用命令,逃避与符号^和既不工作。 我现在的想法。 有什么建议么?

从目前的回应澄清:

  1. 我现在用的子模块
  2. 我传递的命令行参数+作为一个列表
  3. 问题是与路径命令本身,没有任何参数
  4. 我试着引用命令。 它引起[Error 123] The filename, directory name, or volume label syntax is incorrect错误
  5. 我使用没有壳参数(所以shell=false
  6. 如果它的事项,我抓住一个管道标准错误处理它,但忽略标准输出和标准输入
  7. 只有在Windows上使用当前和预期的,我到目前为止测试的所有其他情况下工作。
  8. 发生故障的命令是:

P = subprocess.Popen(PROG,标准错误= subprocess.PIPE,BUFSIZE = -1)

当列表“PROG”的第一个元素包含任何&符号。 引用这第一个字符串不工作。

Answer 1:

请确保您使用的列表和无外壳扩展:

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


Answer 2:

一个合适的回答将需要更多的信息。 什么是你真正在做什么? 它怎么会失败呢? 您使用的子模块? 你传递的参数和Shell =假(或没有shell参数)的列表或者是你实际调用的壳呢?



Answer 3:

尝试引用包含及参数

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

通常是什么要在Linux Shell完成



Answer 4:

“与逃逸的符号^”

你肯定^被转义字符到Windows? 你不应该使用\



Answer 5:

要回答我的问题:

传递参数时,作为一个列表无法正常工作(命令列表的第一项),所以要解决这个问题我把列表转换成以空格分隔字符串,并通过了为子,而不是引用的实际命令。

更好的解决方案仍然欢迎。



Answer 6:

我尝试的情况如下:

exe = 'C:/Program Files (x86)/VideoLAN/VLC/VLC.exe'
url = 'http://translate.google.com/translate_tts?tl=en&q=hello+world'
subprocess.Popen([exe, url.replace("&","^&")],shell=True)

这并不工作。



文章来源: Python subprocess issue with ampersands