我想监控一个日志文件,当新的日志消息匹配我定义的模式(比如包含“错误”)时,然后发送一封电子邮件给我。
为此,我编写了一个 python 脚本 monitor.py,主要部分如下所示:
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 中获取输出。所以我高度怀疑这是由标准输入/标准输出缓冲区大小控制的。如何立即得到输出?
还有一个问题,当我使用tail -f my.log
和tail -f my.log | grep 错误
,为什么它可以立即显示输出?
最佳答案
如果 stdout 连接到 TTY,大多数 Linux 程序将使用行缓冲,否则使用全缓冲。您可以使用 stdbuf
强制行缓冲。
stdbuf -oL tail -f my.log | python monitor.py
关于linux - 如何获得 “instant"的 “tail -f”输出作为输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22162743/