gpt4 book ai didi

Python:如何从另一个进程非阻塞地读取标准输出?

转载 作者:太空狗 更新时间:2023-10-29 17:46:12 26 4
gpt4 key购买 nike

在进程运行期间,我想读取它的标准输出并将其写入文件。然而,我的任何尝试都失败了,因为无论我尝试什么,只要我尝试从 stdout 读取它就会阻塞,直到进程完成。

这是我正在尝试做的事情的片段。 (第一部分只是一个将内容写入标准输出的 python 脚本。)

import subprocess

p = subprocess.Popen('python -c \'\
from time import sleep\n\
for i in range(3):\n\
sleep(1)\n\
print "Hello", i\
\'', shell = True, stdout = subprocess.PIPE)

while p.poll() == None:
#read the stdout continuously
pass

print "Done"

我知道有多个问题涉及同一主题。但是,我找到的没有一个能够回答我的问题。

最佳答案

正在发生的事情是在作者方面进行缓冲。由于您是从小代码片段编写如此小的 block ,因此底层 FILE 对象正在缓冲输出直到结束。以下工作如您所料。

#!/usr/bin/python

import sys
import subprocess

p = subprocess.Popen("""python -c '
from time import sleep ; import sys
for i in range(3):
sleep(1)
print "Hello", i
sys.stdout.flush()
'""", shell = True, stdout = subprocess.PIPE)

while True:
inline = p.stdout.readline()
if not inline:
break
sys.stdout.write(inline)
sys.stdout.flush()

print "Done"

但是,您可能没有期待正确的事情。缓冲是为了减少系统调用的次数,从而使系统更有效率。在将整个文本写入文件之前将其缓冲到最后对您来说真的很重要吗?你还没有得到文件中的所有输出吗?

关于Python:如何从另一个进程非阻塞地读取标准输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6413803/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com