将Python脚本输出连续地输出到另一个程序

时间:2015-12-03 21:52:20

标签: python unix pipe

我想将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发送一个号码并实时显示,是否可能?

3 个答案:

答案 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);