擅长:python、mysql、java
<p>首先,我建议您简化这个示例,以确保您可以实际阅读任何内容。从混合物中去除螺纹的复杂性:</p>
<pre><code>proc = subprocess.Popen("third_party.exe", stdout=subprocess.PIPE, bufsize=1)
print proc.communicate()
</code></pre>
<p>如果能成功的话,太好了。然后,您可能在如何直接或可能在线程中读取stdout方面遇到问题。</p>
<p>如果这不起作用,你有没有试过用管道把stderr连接到stdout?</p>
<pre><code>proc = subprocess.Popen("third_party.exe",
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, bufsize=1)
</code></pre>
<p><strong>更新</strong></p>
<p>既然您说<code>communicate()</code>是死锁,那么这里有另一种方法,您可以尝试查看它是否是子进程内部缓冲区的问题。。。</p>
<pre><code>import tempfile
import subprocess
w = tempfile.NamedTemporaryFile()
p = subprocess.Popen('third_party.exe', shell=True, stdout=w,
stderr=subprocess.STDOUT, bufsize=0)
with open(w.name, 'r') as r:
for line in r:
print line
w.close()
</code></pre>