Python:从subprocess.communicate()读取流输入

我使用Python的subprocess.communicate()从运行大约一分钟的进程中读取stdout。

如何以流的方式打印出该进程的stdout的每一行,以便我可以看到输出生成,但仍然阻塞进程在继续之前终止?

subprocess.communicate()似乎一次给出所有的输出。

最佳答案
请注意,我认为J.F. Sebastian’s method (below)是更好。

这里是一个简单的例子(没有检查错误):

import subprocess
proc = subprocess.Popen('ls',
                       shell=True,
                       stdout=subprocess.PIPE,
                       )
while proc.poll() is None:
    output = proc.stdout.readline()
    print output,

如果ls结束太快,那么while循环可能在您读取所有数据之前结束。

你可以通过这种方式捕获stdout中的剩余部分:

output = proc.communicate()[0]
print output,

转载注明原文:Python:从subprocess.communicate()读取流输入 - 代码日志