【发布时间】:2017-01-04 12:58:03
【问题描述】:
我正在阅读关于子进程模块部分中 Popen 类的 Python 文档,并且遇到了以下代码:
p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]
documentation 还声明
“在启动 p2 之后调用 p1.stdout.close() 很重要,如果 p2 在 p1 之前退出,p1 可以接收 SIGPIPE。
为什么在我们收到 SIGPIPE 之前必须关闭 p1.stdout?如果我们已经关闭了 p1,p1 怎么知道 p2 在 p1 之前退出?
【问题讨论】:
标签: python pipe subprocess