如何实时刷新通过 bash 函数/循环附加到文件的输出?

如何实时刷新通过 bash 函数/循环附加到文件的输出?

我的问题是,我有一个函数调用它,function1它无限期地运行。该函数本身每秒都会回显hello。使用命令:

function1 >> temp.txt

如果我每秒查看文件,temp.txt我都会看到一个带有 的新行hello。然而,实际情况是,该函数直到运行完毕才会写入文件。因此,如果我要终止该函数,则不会写入任何内容。有人知道在这种情况下我可以做什么来基本上动态更新 吗temp.txt

我有一个按以下方式设置的python脚本:

while [1>0]:
   print "hello"
   time.sleep(1)

因此它将始终运行。现在我在 bash 脚本中调用它

python pythonscript.py >> temp.txt

如果kill该过程没有记录任何数据。

答案1

Bash 不会缓冲,但是如果输出不到达终端,python 将会缓冲(因为这样更高效),因此您需要在每一行之后刷新标准输出。

#!/usr/bin/env python
import sys
import time
while True:
    print "hello"
    sys.stdout.flush()
    time.sleep(1)

相关内容