multitail 如何缓冲其输出?

How does multitail buffer its output?

这可能不是问题的最佳措辞。我试图在屏幕上同时查看 2 个文件。 我运行:

multitail ~/path/to/somefile.err ~/path/to/somefile.out

我有一个包含以下行的 python 脚本:

sys.stdout = open('~/path/to/somefile.out', 'a')
sys.stderr = open('~/path/to/somefile.err', 'a')

我的 multitail 命令似乎只输出我的 .out 文件,不管我把文件放在命令中的顺序如何。

我确认我的脚本确实在写入文件。同样有趣的是,当我 运行 以下命令时:

echo "text" >> ~/path/to/somefile.err

突然之间,我在多尾屏幕上看到了 .err 文件的所有输出(包括之前没有显示的)!

这里发生了什么我看不到的事情?

P.S。这是我第一次使用 multitail,所以也许我忽略了一些简单的事情。如果这意味着什么,我正在使用 CentOS 7。

您需要在调用 open.[=19= 时传递 buffering=0(对于无缓冲)或 buffering=1(对于行缓冲 - 可能是您想要的) ]

默认为buffering=-1,相当于buffering=512之类的值取决于系统,因此在写入512(或其他)字节之前不会向文件写入任何内容.


或者,您可以将 buffering 设置为其默认值,并在每次您希望数据出现在文件中时调用 .flush()


当您在 shell 中使用 >> 时,将在命令退出时关闭文件,关闭意味着刷新。 (您可以使用 exec >> file.txt 延迟关闭)