Popen的Python文档指出:
警告使用communic()而不是.stdin.write,.stdout.read或.stderr.read来避免由于任何其他OS管道缓冲区填满和阻止子进程而导致的死锁.
现在,我试图弄清楚这种僵局是如何发生的以及原因.
我的心理模型:subproccess生成一些stdout/err,它被缓冲,填充缓冲区之后,它被刷新到subproccess的stdout/err,它通过管道发送到父进程.
从文档说明,管道拥有它自己的缓冲区,当它被填充或子进程终止时,它被刷新到父进程.
无论哪种方式(使用管道缓冲区),我都不完全确定死锁是如何发生的.我唯一能想到的是某种"全局"OS管道缓冲进程将会争取,这听起来很奇怪.另一个是更多进程将共享相同的管道,这不应该自己发生.
有人可以解释一下吗?