如何在脚本仍在运行时使shell输出重定向(>)写入?

时间:2010-05-02 11:50:45

标签: python linux bash shell command-line

我写了一个永远不会终止的短脚本。这个脚本不断生成输出,我不得不每次检查。我通过SSH在实验室计算机上运行它,并将输出重定向到该机器上的public_html文件夹中的文件。

python script.py > ~/public_html/results.txt

但是,刷新地址时,结果不会立即显示。当我终止程序时,结果显示出来,但正如我所说,它不会自行停止。重定向(>)是否与写作一样懒惰?有没有办法连续(或间隔)更新文件中的结果?

或者是网络服务器在仍在写入时不更新文件?

3 个答案:

答案 0 :(得分:15)

如果要立即查看,则需要刷新输出sys.stdout.flush()(或smth)。见this

答案 1 :(得分:7)

如果未连接到终端,

stdout 将被缓冲。

您可以通过 stdbuf

将此政策更改为线路缓冲
stdbuf -oL python script.py > ~/public_html/results.txt

因此,如果不需要行缓冲,则不必刷新Python脚本并保持IO效率。

答案 2 :(得分:1)

我怀疑该文件正在被连续写入,但是Web服务器正在报告文件的修改日期为打开时间,因此报告文件没有发生任何更改并且结果正在缓存(在Web服务器或客户端)。

我首先尝试强制重新加载(Ctrl + F5或Ctrl + Shift + R或Shift +< reload_button>)并查看是否有帮助。如果没有,那么你可以尝试其他的东西。

在服务器上的单独shell中,执行

tail -f ~/public_html/results.txt

Tail打印出文件的最后n行(其中n默认为10),但-f参数监视文件并在文件增长时继续报告输出。这至少可以让您确信文件正在逐步写入。

我希望有所帮助。