我编写了一个C ++程序,可以在Linux控制台中生成所有文本。
我使用python脚本来解析这个C ++的输出。我是这样做的:
cmd = ["./starter"]
p = subprocess.Popen(cmd,
stdout=subprocess.PIPE)
for line in p.stdout:
strLine = str(line).rstrip()
print(">>> " + strLine )
这很有效。但是我有一个重大问题,输出不是直播。我的意思是,在启动脚本之后没有打印出任何内容,但只有在第二件事情出来后才会出现..这几乎就像是python正在等待一些字符最大值然后立即打印出来......
有没有办法让python打印一条线,因为它是由C ++程序打印的?
答案 0 :(得分:1)
您正在使用stdout
文件作为迭代器,并使用较大的缓冲区,延迟打印。请改用.readline()
;你仍然可以使用带有哨兵的iter()
进入循环:
for line in iter(p.stdout.readline, ''):
strLine = str(line).rstrip()
print(">>> " + strLine )
您还可以在打印函数调用中添加flush=True
:
print(">>> " + strLine, flush=True)
或者,如果您使用的是Python 2而不是Python 3(其中print
是一个语句而不是函数),您可以直接刷新stdout
缓冲区:
import sys
sys.stdout.flush()
默认情况下,stdout
是行缓冲的,因此python通常应该在您打印换行符时刷新缓冲区。