我希望监视一个日志文件,当新的日志消息符合我定义的模式(比如包含“error”)时,发送邮件给我。
为此,我编写了一个名为monitor.py的Python脚本,主要部分如下:
为此,我编写了一个名为monitor.py的Python脚本,主要部分如下:
import sys
for line in sys.stdin:
if "error" in line:
print line
当我使用 tail my.log | python monitor.py
时,它可以正常工作,但是当我切换到 tail -f my.log | python monitor.py
后,它不起作用,至少不是立即起作用。
我进行了一些测试,当日志中的新内容累积到8KB时,我的Python脚本才能从tail得到输出。因此,我非常怀疑这是由stdin/stdout缓冲区大小控制的。如何立即获得输出?
另外一个问题是,当我使用 tail -f my.log
和 tail -f my.log | grep error
时,为什么它可以立即显示输出?
tail -f
或者python
命令前加上stdbuf
前缀,还是两个命令都可以? - anishsanestdbuf -oL
,我的Python脚本仍然无法读取来自tail -f
的输出。 - Wenzhong