Python子进程仅传递一个参数

时间:2014-07-27 10:51:16

标签: python linux python-2.7

我有一个Python脚本(2.7),用于调用外部进程。最近它工作正常。

但是现在当我运行它时,我发现它并没有通过进程参数。我还调试了被调用的进程,它只接收了单个参数(进程可执行文件的路径)。

p = subprocess.Popen(["./myapp","-p","s"],shell=True)
p.communicate()

执行上述代码仅通过" myapp"作为命令参数。为什么会发生这种情况?

2 个答案:

答案 0 :(得分:2)

使用shell=True时,只需传递字符串(不是列表);

p = subprocess.Popen('./myapp -p s', shell=True)
p.communicate()

<强>更新

总是喜欢;

  • shell=False(默认值)到shell=True并传递一个字符串数组;和
  • 可执行文件的绝对路径,而不是相对路径。

即;

with subprocess.Popen(['/path/to/binary', '-p', 's']) as proc:
    stdout, stderr = proc.communicate()

如果您只对stdout(而非stderr)感兴趣,请选择上述解决方案(它更安全,更短):

stdout = subprocess.check_output(['/path/to/binary', '-p', 's'])

答案 1 :(得分:1)

不要使用shell=True

p = subprocess.Popen(["./myapp","-p","s"])
p.communicate()