为什么Python子进程的这种简单用法会挂起?

时间:2011-08-19 15:49:42

标签: python subprocess

import subprocess

proc1 = subprocess.Popen(['cat'], stdout=subprocess.PIPE, stdin=subprocess.PIPE)
proc2 = subprocess.Popen(['cat'], stdout=subprocess.PIPE, stdin=subprocess.PIPE)

proc1.stdin.close()
proc1.wait()

使用Python 2.6.6在Debian上运行时,程序永远不会退出。奇怪的是,当我将最后两行更改为使用proc2时,它确实会退出。

这里发生了什么?

1 个答案:

答案 0 :(得分:0)

尝试在终端中输入不带参数的“cat”。 “cat”需要一些东西才能连接到标准输出。

>>> from subprocess import Popen, PIPE
>>> args = ["cat", "foobar"]
>>> reply = Popen(args, stdout=PIPE).communicate()[0]
>>> print (reply)
line 0
line 1
line 2

>>>

文档有很多用法示例:

http://docs.python.org/library/subprocess.html#replacing-shell-pipeline