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

我写了一个简短的脚本,永远不会终止。 这个脚本不断产生的输出,我必须不时检查。 我通过SSH在实验室计算机上运行它,并将输出redirect到该机器上的public_html文件夹中的文件。

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

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

或者是它仍然在写入时不更新文件的networking服务器?

Solutions Collecting From Web of "如何使脚本仍在运行时shell输出redirect(>)写入?"

如果要立即查看,则需要刷新输出sys.stdout.flush() (或者smth)。 看到这个

标准输出缓冲,如果没有连接到终端。

您可以将此策略更改为通过stdbuf行缓冲

 stdbuf -oL python script.py > ~/public_html/results.txt 

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

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

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

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

 tail -f ~/public_html/results.txt 

尾部打印出文件的最后n行(其中n默认为10),但-f参数监视文件并在文件增长时继续报告输出。 这至少会让你相信这个文件正在被增量写入。

我希望有帮助。