【发布时间】:2011-04-04 20:10:31
【问题描述】:
我正在使用subprocess.* 运行来自python3 程序的命令管道;我不想
通过 shell,因为我将参数传递给我的子命令,并确保这些不会被 shell 误解,这将是一场噩梦。
subprocess 文档给出了如何做到这一点的示例:
p1 = Popen(command1, stdout=PIPE)
p2 = Popen(command2, stdin=p1.stdout)
p2.wait()
p1.wait()
这很好用。但是,我想知道在生产者之前启动消费者是否更安全,所以
p2 = Popen(command2, stdin=PIPE)
p1 = Popen(command1, stdout=p2.stdin)
p2.wait()
p1.wait()
我希望这会以完全相同的方式表现,但显然他们没有。第一个代码完美无缺;第二,我的程序挂起;如果我查看系统,我可以看到 p1 已死,等待收获,而 p2 永远挂起。有没有合理的解释?
【问题讨论】:
标签: python-3.x subprocess pipe