首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python读取实时输出(linux)

Python读取实时输出(linux)
EN

Stack Overflow用户
提问于 2013-01-30 10:01:53
回答 1查看 1.9K关注 0票数 0

可能重复: read subprocess stdout line by line

我编写了一个C++程序,它在Linux控制台中生成所有文本。

我正在使用python脚本来解析这个C++的输出。我就是这样做的:

代码语言:javascript
复制
cmd = ["./starter"] 

p = subprocess.Popen(cmd, 
    stdout=subprocess.PIPE)

for line in p.stdout:

    strLine = str(line).rstrip()
    print(">>> " + strLine )

这很管用。但我有一个大问题,输出不是活的。我的意思是,在开始剧本之后,什么都没有打印出来,但只有在第二件事出来之后..就像蟒蛇在等待大量的字符,然后一次把它们全部打印出来…

有没有一种方法可以让python在C++程序打印一条行时立即打印它?

EN

回答 1

Stack Overflow用户

发布于 2013-01-30 10:03:15

您正在使用stdout文件作为迭代器,这使用了一个较大的缓冲区,延迟了打印。相反,可以使用.readline();您仍然可以使用带有哨兵的iter()将其转换为循环:

代码语言:javascript
复制
for line in iter(p.stdout.readline, ''):
    strLine = str(line).rstrip()
    print(">>> " + strLine )

还可以将flush=True添加到打印函数调用中:

代码语言:javascript
复制
print(">>> " + strLine, flush=True)

或者,如果您使用的是Python2而不是Python3(其中print是语句,而不是函数),则可以直接刷新stdout缓冲区:

代码语言:javascript
复制
import sys

sys.stdout.flush()

默认情况下,stdout是行缓冲的,所以每当您打印换行符时,python通常都会刷新缓冲区。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14601183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档