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
延迟关闭)
这可能不是问题的最佳措辞。我试图在屏幕上同时查看 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
延迟关闭)