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

为什么Python的这种简单用法';s子进程挂起?,python,subprocess,Python,Subprocess,在使用Python2.6.6在Debian上运行此程序时,程序永远不会退出。奇怪的是,当我将最后两行更改为使用proc2时,它确实退出了 这是怎么回事?试着在终端中键入没有参数的“cat”。“cat”需要连接到stdout的东西 import subprocess proc1 = subprocess.Popen(['cat'], stdout=subprocess.PIPE, stdin=subprocess.PIPE) proc2 = subprocess.Popen(['cat'], s

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

这是怎么回事?

试着在终端中键入没有参数的“cat”。“cat”需要连接到stdout的东西

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.7的Windows 7上干净地退出而不输出(但在使用MSYS的bash中运行)子流程在POSIX和Windows上使用不同的内部实现(毫不奇怪)。可在Gentoo w/2.6和3.1上复制。#python开发人员认为这是一个bug,我打开了一个:如果希望回复是一个好的列表,只需执行reply=reply.strip().split(“\n”)错误。。。不知道为什么这会被否决。答案有问题吗?我没有投反对票,但这是错误的,请尝试在终端中不带任何参数运行
cat
,然后发送EOF(例如按Ctrl-D)。是否向Popen对象发送EOF?尝试以下操作:>>>args=[“cat”]>>reply=Popen(args,stdout=PIPE)。communicate()[0]
>>> from subprocess import Popen, PIPE
>>> args = ["cat", "foobar"]
>>> reply = Popen(args, stdout=PIPE).communicate()[0]
>>> print (reply)
line 0
line 1
line 2

>>>