首先,我建议您简化此示例,以确保您可以实际阅读任何内容。从混合中删除线程的复杂性:
proc = subprocess.Popen("third_party.exe", stdout=subprocess.PIPE, bufsize=1)print proc.communicate()如果可行,那就太好了。然后您可能在如何直接读取标准输出或在线程中读取问题。
如果这不起作用,您是否也尝试将stderr管道连接到stdout?
proc = subprocess.Popen("third_party.exe", stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=1)更新资料
由于您说的
communicate()是死锁,这是另一种方法,您可以尝试查看其是否与子进程的内部缓冲区有关。
import tempfileimport subprocessw = 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 linew.close()


