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

1 投票
1 回答
860 浏览
提问于 2025-04-16 23:57
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()

在Debian上用Python 2.6.6运行这个程序时,它一直不结束。奇怪的是,当我把最后两行改成用proc2时,它就能正常结束了。

这是怎么回事呢?

1 个回答

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

撰写回答