如何读取当前在subprocess.stdout管道中的所有内容并返回?

1 投票
2 回答
845 浏览
提问于 2025-04-15 13:03

我正在使用Python的subprocess模块来通过标准输入和输出与一个程序进行交互。如果我在输出的stdout上调用subprocess的readline(),程序就会卡住,因为它在等待换行符。

我该如何读取子进程实例的stdout管道中的所有字符呢?如果有关系的话,我是在Linux系统上运行。

2 个回答

2

你应该用read()这个函数来循环读取固定数量的字符。

4

似乎还有其他人遇到过同样的问题,你可以在这里查看相关讨论。

如果你是在Linux系统上,可以使用select来等待进程的标准输出(stdout)有输入。或者,你可以通过以下方式将进程的标准输出模式改为非阻塞模式:

import fcntl, os 
fcntl.fcntl(your_process.stdout, fcntl.F_SETFL, os.O_NONBLOCK)

这样你就可以使用read()方法循环读取,直到遇到换行符(如果你想逐行处理输出的话)。

撰写回答