擅长:python、mysql、java
<p>要在Python 3中刷新子进程的标准输出缓冲区后立即逐行打印子进程的输出,请执行以下操作:</p>
<pre><code>from subprocess import Popen, PIPE, CalledProcessError
with Popen(cmd, stdout=PIPE, bufsize=1, universal_newlines=True) as p:
for line in p.stdout:
print(line, end='') # process line here
if p.returncode != 0:
raise CalledProcessError(p.returncode, p.args)
</code></pre>
<p>注意:您不需要<code>p.poll()</code>——循环在达到eof时结束。而且您不需要<code>iter(p.stdout.readline, '')</code>——预读错误在Python3中已经修复</p>
<p>另见,<a href="https://stackoverflow.com/a/17698359/4279">Python: read streaming input from subprocess.communicate()</a></p>