我想将Python脚本中的一些数据连续输出到另一个程序。作为一个例子,我将使用cat
,这是目前发生的事情:
如果我的test1.py
脚本是这样的:
print("Hello!")
当我运行./test1.py | cat
输出为Hello!
时,它的工作原理是因为脚本在执行后立即终止。
如果我的脚本连续写入并且永远不会像test2.py
那样终止,则会出现问题:
import time
a = 0
while True:
a += 1
print(a)
time.sleep(1)
然后./test2.py | cat
就会挂起,因为脚本没有终止。
我想每秒向cat
发送一个号码并实时显示,是否可能?
答案 0 :(得分:2)
在你的打印中设置flush=True
,你的输出会被缓冲,有一个很好的artice Unix buffering delays output to stdout, ruins your day可以解释发生了什么:
import time
a = 0
while True:
a += 1
print(a, flush=True)
time.sleep(1)
如果您使用的是python2,请添加from __future__ import print_function
答案 1 :(得分:1)
打印后需要刷新到标准输出。所以你的代码看起来像这样:
import sys
import time
a = 0
while True:
a += 1
print(a)
time.sleep(1)
sys.stdout.flush()
现在正在运行python script.py | cat
会打印一个。
答案 2 :(得分:0)
./ test2.py |尾巴-f
-f, - follow [= {name | descriptor}]
$text = preg_replace("/\brn\b/", "<br />", $text);