在下面的代码中,如果在 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
我不会得到输出如何在这种情况下获得响应。
最佳答案
当您设置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
关于python - 当 Subprocess shell=False 时无法读取响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31794296/