Subprocess shell = False时无法读取响应

时间:2015-08-03 18:29:40

标签: python subprocess

在下面的代码中,如果在Windows平台上执行,我将获得输出

import subprocess
COMMAND = " Application.exe arg1 arg2"
process = subprocess.Popen(COMMAND, stdout=subprocess.PIPE, stderr=None, shell=True)

while process.poll() is None:
 output = process.stdout.readline()
 print output,

输出>一些文字

但是,如果我使用shell=False,我不会得到输出如何在这种情况下获得响应。

1 个答案:

答案 0 :(得分:2)

设置shell=False时,必须提供COMMAND作为包含程序名称和参数的列表:

使用shell=True

COMMAND = "Application.exe arg1 arg2"

使用shell=False

COMMAND = ["Application.exe", "arg1", "arg2"]

我建议您在任何情况下都不要将subprocess.Popenshell=True一起用于安全措施,并尽可能使用communicate()

>>> import subprocess
>>> COMMAND = " Application.exe arg1 arg2".strip().split()
>>> process = subprocess.Popen(COMMAND, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False)

>>> output, error = process.communicate()
>>> print output