【发布时间】:2010-11-12 19:01:06
【问题描述】:
我正在使用 python 的 subprocess 模块通过 stdin 和 stdout 管道与程序交互。如果我在 stdout 上调用子进程 readline(),它会挂起,因为它正在等待换行符。
如何读取子流程实例的标准输出管道中的所有字符?如果重要的话,我在 Linux 中运行。
【问题讨论】:
我正在使用 python 的 subprocess 模块通过 stdin 和 stdout 管道与程序交互。如果我在 stdout 上调用子进程 readline(),它会挂起,因为它正在等待换行符。
如何读取子流程实例的标准输出管道中的所有字符?如果重要的话,我在 Linux 中运行。
【问题讨论】:
其他人好像也有同样的问题,可以看相关讨论here。
如果您在 Linux 上运行,您可以使用 select 等待进程的标准输出上的输入。或者,您可以使用
将进程的标准输出模式更改为非阻塞import fcntl, os
fcntl.fcntl(your_process.stdout, fcntl.F_SETFL, os.O_NONBLOCK)
之后您可以使用 read() 循环,直到遇到换行符(如果您想一次处理一行输出)。
【讨论】:
您应该对一组字符使用 read() 循环。
【讨论】: