在Linux的Python中,我想启动一个子进程,等待它在标准输出上打印一行,然后继续我的Python脚本的其余部分。如果我这样做了:
from subprocess import *
proc = Popen(my_process, stdout=PIPE)
proc.readline()
# Now continue with the rest of my script
如果我的进程向其stdout写入了大量内容,是否会因为管道被填满而最终阻塞?
理想情况下,我希望其余的输出转到我的脚本的标准输出。有没有办法在启动后将子进程的stdout从管道改为我的标准输出?
我猜我将不得不产生一个单独的线程来读取我的进程的stdout并打印到我自己的,但如果有更简单的解决方案,我想避免这种情况。
发布于 2013-09-13 15:35:22
是否停止该进程?
proc.terminate()
在readline之后
发布于 2013-09-13 15:43:02
如果行特别大,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....
https://stackoverflow.com/questions/18790030
复制相似问题