python subprocess.Popen捕获大量输出

时间:2012-07-04 00:32:18

标签: python subprocess

我从python脚本调用subprocess.Popen然后调用communication

process = subprocess.Popen(cmds, shell=shell, stdout=subprocess.PIPE,  
                               stderr=subprocess.PIPE)  

stdout, stderr = process.communicate()

这个问题是stdout被缓冲并且只捕获一定数量的字符。

问题是,如何获得完整的标准输出和我产生的过程的完整标准?

1 个答案:

答案 0 :(得分:0)

几点。

如果您对 stdout / stderr 使用 PIPE ,并且 Popened 进程开始写入大量数据,并且在您的过程中不读 stdout / stderr 然后 Popened进程会阻止 种类 表示为

Note

Do not use stdout=PIPE or stderr=PIPE with this function. As the pipes are not being read in the current process, the child process may block if it generates enough output to a pipe to fill up the OS pipe buffer.

关于你指出的另一个注释。这仅适用于您使用 stdout = None,stderr = None 的Popen。在这种情况下,所有 Popened process' out / err都将存储在内存中。