我写了一个永远不会终止的短脚本。这个脚本不断生成输出,我不得不每次检查。我通过SSH在实验室计算机上运行它,并将输出重定向到该机器上的public_html文件夹中的文件。
python script.py > ~/public_html/results.txt
但是,刷新地址时,结果不会立即显示。当我终止程序时,结果显示出来,但正如我所说,它不会自行停止。重定向(>
)是否与写作一样懒惰?有没有办法连续(或间隔)更新文件中的结果?
或者是网络服务器在仍在写入时不更新文件?
答案 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参数监视文件并在文件增长时继续报告输出。这至少可以让您确信文件正在逐步写入。
我希望有所帮助。