子流程输出到PIPE并直接输出到stdout

时间:2015-04-10 09:38:29

标签: python subprocess

我发现了许多看起来像我的问题,但这些问题没有产生我可以使用的解决方案(最接近的是:subprocess output to stdout and to PIPE

问题:我想使用子进程启动进程,这需要很长时间。运行命令后,我需要解析stdout-output和stderr-output。

目前我这样做:

p = subprocess.Popen( command_list, stdout=subprocess.PIPE, 
    stderr=subprocess.PIPE )
out, error_msg = p.communicate()
print out + "\n\n" + error_msg

#next comes code in which I check out and error_msg

但是这种方法的缺点是用户在运行时看不到进程的输出。仅在结尾处打印输出。

有没有办法在命令运行时打印输出(好像我给出了没有stdout / stderr = subprocess.PIPE的命令)并且最后还是通过p.communicate输出了?

注意:我目前正在开发python 2.5(使用此python版本的旧软件版本)。

1 个答案:

答案 0 :(得分:2)

此片段在类似的情况下帮助了我一次:

process = subprocess.Popen(cmd, bufsize=1, universal_newlines=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in iter(process.stdout.readline, ''):
    print line,
    sys.stdout.flush() # please see comments regarding the necessity of this line 
process.wait()
errcode = process.returncode