持续将Python脚本输出导入另一个程序

3

我需要将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个回答

2

在你的print中加上flush=True,可以清空缓冲区并输出内容。如果不加这个参数,输出会被缓存起来。这篇文章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

这解决了我的问题,我会将其标记为正确答案,因为它不需要直接使用 sys.stdout,同时也很好地了解了新的Python3功能。 - dan_s
1
@dan_s,不用担心,我添加了一篇文章的链接,其中有一个很好的解释。 - Padraic Cunningham

1

在打印后需要刷新到标准输出。所以你的代码应该像这样:

import sys
import time

a = 0
while True:
    a += 1
    print(a)
    time.sleep(1)
    sys.stdout.flush()

现在运行python script.py | cat将会打印出a。

0

./test2.py | tail -f

-f, --follow[={name|descriptor}]

      output  appended data as the file grows; -f, --follow, and --follow=descriptor are equivalent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接