流和打印stderr并将stdout写入文件

时间:2015-01-15 19:59:22

标签: python

使用python我试图流式传输stderr并将stderr打印到控制台,同时将stdout的值赋给变量,这段代码看起来像我想要的那样,但这是我怎么做的呢?

proc = subprocess.Popen(["my","long","command"],
            stdin=subprocess.PIPE,
            stdout=subprocess.PIPE, 
            stderr = subprocess.PIPE)
while True: 
    line = proc.stderr.readline() 
    if not line: 
        break 
    print line 

st_out = proc.communicate()[0]
#now process st_out 

2 个答案:

答案 0 :(得分:0)

您可以删除while和if语句:

for line in iter(proc.stderr.readline, ""):
    print(line)

答案 1 :(得分:0)

Popen.communicate用于读取stdout和stderr以完成而不会出现死锁。如果你"预读" stdout,你运行stderr将填充的风险,程序将阻止。由于您希望stderr进入控制台,因此您不应该首先重定向它。只需使用沟通来阅读标准输出:

proc = subprocess.Popen(["my","long","command"], stdout=subprocess.PIPE)
st_out = proc.communicate()[0]