我编写了以下程序作为示例-
from subprocess import *
import shlex
def pipe(command):
proc = Popen(shlex.split(command), stdout=PIPE, stderr=PIPE)
out, err = proc.communicate()
print "output:", out # blank
print "errors:", err # expected output
#return str(err) # returns expected output
return str(out) # returns blanked output
out = pipe('python --version')
print 'pipe returned ----- %s' % out
实际上, err 保留了期望值,而不是 out 。
答案 0 :(得分:2)
主要错误是没有根据的假设,即版本信息将显示在标准输出上。这是标准化程度不高的工具,但是Python和其他许多Unix工具会将此输出发送到标准错误。
不太重要的是,您应该使用subprocess.run()
而不是原始的Popen()
;而不是import *
。
from subprocess import run, PIPE
out = run(['python', '--version'],
stdout=PIPE, stderr=PIPE, universal_newlines=True,
check=True).stderr
如果您喜欢shlex
,可以使用该命令将命令分成两个字符串列表,尽管在这种情况下看起来似乎是多余的。