如何让shell输出重定向(>)在脚本运行时写入?
我写了一个短小的脚本,它一直在运行,永远不会停止。这个脚本会不断生成一些输出,我需要时不时去查看一下。我是在实验室的电脑上通过SSH运行这个脚本,并把输出重定向到那台机器上我public_html文件夹里的一个文件里。
python script.py > ~/public_html/results.txt
不过,当我刷新地址时,结果并不会立刻显示出来。只有在我终止程序后,结果才会出现,但正如我所说,它不会自己停止。这个重定向(>
)是不是在写入时比较懒惰?有没有办法让文件里的结果持续更新(或者说按一定间隔更新)呢?
还是说是因为在文件还在写入的时候,网页服务器不更新这个文件呢?
3 个回答
1
我怀疑这个文件一直在被写入,但网页服务器报告的文件修改时间是它被打开的时间,所以它认为文件没有变化,结果就被缓存了(可能是在网页服务器上,也可能是在客户端)。
我建议你先试试强制刷新页面(可以按 Ctrl+F5 或 Ctrl+Shift+R,或者 Shift+
在服务器上打开一个新的命令行窗口,输入
tail -f ~/public_html/results.txt
这个命令会显示文件的最后几行(默认是10行),而加上 -f 参数后,它会持续监控这个文件,并在文件内容增加时不断输出新的内容。这样你至少可以确认文件确实在不断被写入。
希望这能帮到你。
7
stdout 是有缓冲的,如果没有连接到终端的话。
你可以通过 stdbuf 来改变这个设置,让它变成行缓冲。
stdbuf -oL python script.py > ~/public_html/results.txt
这样的话,如果不需要行缓冲,你就不必在你的 Python 脚本中手动刷新,这样可以保持输入输出的效率。
16
如果你想立刻看到输出的内容,就需要刷新一下输出,使用 sys.stdout.flush()
(或者其他类似的方式)。详细信息可以查看 这个链接。