Python从子进程读取输出

Python从子进程读取输出,python,subprocess,Python,Subprocess,我有一个程序,它打开一个子进程,并通过写入它的stdin和读取它的stdout与之通信 proc = subprocess.Popen(['foo'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE) proc.stdin.write('stuff\n') p

我有一个程序,它打开一个子进程,并通过写入它的
stdin
和读取它的
stdout
与之通信

proc = subprocess.Popen(['foo'],
                        stdout=subprocess.PIPE,
                        stderr=subprocess.PIPE,
                        stdin=subprocess.PIPE)

proc.stdin.write('stuff\n')
proc.stdin.flush()
问题是,在读取时,如果调用
proc.stdout.read()
,以及尝试使用以下命令逐行读取时,它总是会阻塞:

output = str()
while proc.stdout in select.select([proc.stdout], [], [])[0]:
    output += proc.stdout.readline()
由于
select.select
返回
proc.stdout
,即使已经读取了所有输出,它仍然会阻塞。我能做什么


请注意,我没有使用
proc.communicate
,因为我想与流程多次通信

您希望从
stdout
读取什么类型的输出?固定数量的线路?固定的字节数?多行直到找到空行?其他的?换句话说:程序应该在什么时候停止从标准输出读取数据并开始做其他事情?。。。或者你想只阅读现在可用的内容吗?(为了实现所谓的“异步通信”),子进程向标准输出生成了多少数据?有一个和阻塞子进程。它不是固定的行数;我给进程写了一个命令,它会返回一些不同的行数。看起来很相似