Python从子进程读取输出

时间:2016-03-16 18:04:14

标签: python subprocess

我有一个程序可以打开一个子流程并通过写入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,因为我希望多次与流程进行通信

0 个答案:

没有答案