我有一个Python脚本(2.7),用于调用外部进程。最近它工作正常。
但是现在当我运行它时,我发现它并没有通过进程参数。我还调试了被调用的进程,它只接收了单个参数(进程可执行文件的路径)。
p = subprocess.Popen(["./myapp","-p","s"],shell=True)
p.communicate()
执行上述代码仅通过" myapp"作为命令参数。为什么会发生这种情况?
答案 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()