Python multitail如何缓冲其输出?
这可能不是这个问题的最佳措辞。我试图在屏幕上同时看到2个文件。 我运行: 我有一个包含以下行的python脚本:Python multitail如何缓冲其输出?,python,linux,redhat,Python,Linux,Redhat,这可能不是这个问题的最佳措辞。我试图在屏幕上同时看到2个文件。 我运行: 我有一个包含以下行的python脚本: sys.stdout = open('~/path/to/somefile.out', 'a') sys.stderr = open('~/path/to/somefile.err', 'a') 我的multitail命令似乎只输出.out文件,而不管我在命令中放置文件的顺序如何 我验证了我的脚本确实正在写入文件。同样有趣的是,当我运行以下命令时: echo "text" >
sys.stdout = open('~/path/to/somefile.out', 'a')
sys.stderr = open('~/path/to/somefile.err', 'a')
我的multitail命令似乎只输出.out文件,而不管我在命令中放置文件的顺序如何
我验证了我的脚本确实正在写入文件。同样有趣的是,当我运行以下命令时:
echo "text" >> ~/path/to/somefile.err
突然,我在multitail屏幕上看到了.err文件的所有输出(包括以前没有显示的输出)
这里发生了什么我看不见的事
另外,这是我第一次使用multitail,所以我可能忽略了一些简单的东西。如果有什么意义的话,我正在使用CentOS 7。您需要在调用
打开时传递缓冲=0
(对于无缓冲)或缓冲=1
(对于行缓冲-可能是您想要的)
默认值为buffering=-1
,相当于buffering=512
,其值取决于系统,因此在写入512(或其他)字节之前,不会向文件写入任何内容
或者,您可以将缓冲设置为其默认值,并在每次希望数据显示在文件中时调用.flush()
在shell中使用>
时,当命令退出时,将关闭文件,关闭意味着刷新。(您可以使用exec>>file.txt
延迟关闭)stderr(.err)可能正在被缓冲,在缓冲足够的信息后,它将全部显示。在您的计算机上查找unbuffer
,如果存在,您可以unbuffer
单个输出cmd(不确定在python
中执行什么操作)。您可能可以执行取消缓冲python3 mypython.py
。在GNUCoreutils中,还有stdbuf
,它做同样的事情,但可能需要不同的调用。检查man stdbuf
。祝你好运
echo "text" >> ~/path/to/somefile.err