0

从 Linux 中的 Python 开始,我想启动一个子进程,等到它在标准输出上打印一行,然后继续我的 Python 脚本的其余部分。如果我做:

from subprocess import *

proc = Popen(my_process, stdout=PIPE)
proc.readline()

# Now continue with the rest of my script

如果我的进程由于管道填满而向其标准输出写入大量内容,它最终会阻塞吗?

理想情况下,我希望其余的输出转到我的脚本的标准输出。有没有办法在启动后将子进程的标准输出从 PIPE 更改为我的标准输出?

我猜我必须生成一个单独的线程才能从我的进程的标准输出中读取并打印到我自己的,但如果有更简单的解决方案,我想避免这种情况。

4

2 回答 2

0

停止进程?

proc.terminate()

在阅读线之后

于 2013-09-13T15:35:21.647 回答
0

如果行特别大,readline 方法不应阻塞,这是直接将数据从管道缓冲区中拉出并进入用户空间。如果数据保留在管道缓冲区中,它很有可能会阻止生成的进程,但我很确定 Python 必须先将数据从管道缓冲区中取出,然后才能检查它的行尾。

或者您可以直接从管道中读取字符,这样可以防止任何可能的缓冲区问题:

from subprocess import *
proc = Popen(my_process, stdout=PIPE)
c = ' '
while c != '\n':
    c = proc.stdout.read(1)
# Now complete the rest of the program....
于 2013-09-13T15:43:01.740 回答