我有一个可以输出大量数据到stdout的子进程。当生成太多数据时,它会导致子进程挂起,因为它正在等待清空stdout缓冲区。
以下是一个小例子......
test.朋友
#!/usr/local/bin/python2.7
# test.py
import subprocess
proc = subprocess.Popen(["python","./_ping_con.py"], stdout = subp.PIPE)
while proc.poll() is None:
pass
print proc.stdout.read()
......和子流程:
#!/usr/local/bin/python2.7
# _ping_con.py
print(96000 * "*") # Hangs here because it's too much data for the stdout pipe
我想知道的是,可以扩展此缓冲区以允许处理更多数据吗?如果没有,是否有不同的方式我可以发送我的数据,以避免这个问题?或者在主进程中,有没有办法判断stdout缓冲区是否已满并执行读取?
我最终做的是将所有输出写入临时文件,然后将文件名传递回父级。效果很好!