在下面的代码中,如果在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
,我不会得到输出如何在这种情况下获得响应。
答案 0 :(得分:2)
设置shell=False
时,必须提供COMMAND
作为包含程序名称和参数的列表:
使用shell=True
:
COMMAND = "Application.exe arg1 arg2"
使用shell=False
:
COMMAND = ["Application.exe", "arg1", "arg2"]
我建议您在任何情况下都不要将subprocess.Popen
与shell=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