我编写了一个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在C++程序打印一条行时立即打印它?
发布于 2013-01-30 10:03:15
您正在使用stdout文件作为迭代器,这使用了一个较大的缓冲区,延迟了打印。相反,可以使用.readline();您仍然可以使用带有哨兵的iter()将其转换为循环:
for line in iter(p.stdout.readline, ''):
strLine = str(line).rstrip()
print(">>> " + strLine )还可以将flush=True添加到打印函数调用中:
print(">>> " + strLine, flush=True)或者,如果您使用的是Python2而不是Python3(其中print是语句,而不是函数),则可以直接刷新stdout缓冲区:
import sys
sys.stdout.flush()默认情况下,stdout是行缓冲的,所以每当您打印换行符时,python通常都会刷新缓冲区。
https://stackoverflow.com/questions/14601183
复制相似问题