Python读取子进程的输出

2024-04-19 12:10:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个程序,它打开一个子进程,并通过写入它的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,因为我想与进程进行多次通信


Tags: 程序outputfoo进程stderrstdinstdoutproc