我使用多个命令来运行:
e.g。 cd foo/bar; ../../run_this -arg1 -arg2="yeah_ more arg1 arg2" arg3=/my/path finalarg
以:
运行 p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
(out, err) = p.communicate()
但这会在屏幕(Python 2.7.5)
上吐出输出
而out是空字符串。
答案 0 :(得分:0)
您有shell=True
,因此您基本上读取了所生成的shell的标准输出,而不是您要运行的程序的标准输出。
我猜你正在使用shell=True
来适应目录的变化。幸运的是,subprocess
可以为您处理(通过cwd
关键字参数传递目录):
import subprocess
import shlex
directory = 'foo/bar'
cmd = '../../run_this -arg1 -arg2="yeah_ more arg1 arg2" arg3=/my/path finalarg'
p = subprocess.Popen(shlex.split(cmd), cwd=directory, stdout=subprocess.PIPE)
(out, err) = p.communicate()
答案 1 :(得分:0)
根据评论我也添加了stderr,并且有效!:
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,stderr=subprocess.STDOUT)