文件以下程序

时间:2014-05-06 04:15:34

标签: python linux tail

我正在尝试构建一个跟踪日志文件的python程序来检查某些模式。 (很像grep ..)

部分测试代码' test.py'是读stdin,

import fileinput
for line in fileinput.input():
    print line

所以,如果我在一个终端

中这样做
tail -f log.txt | python test.py

在另一个终端

echo "hello" >> log.txt

你希望hello在第一个终端打印出来,但它没有。如何更改代码?我也想像这样使用它

cat log.txt | python test.py

使用相同的test.py。

1 个答案:

答案 0 :(得分:0)

直接回应sys.stdin似乎适用于我的Mac OS笔记本电脑:

import sys
for line in sys.stdin:
    print line.rstrip()

但有趣的是,这在我的Linux机器上效果不佳。它最终将打印tail -f的输出,但缓冲肯定会让它看起来好像程序不起作用(它会在等待几秒后打印出相当大的块)。

相反,我通过一次读取sys.stdin一个字节来获得更多响应行为:

import sys

buf = ''
while True:
    buf += sys.stdin.read(1)
    if buf.endswith('\n'):
        print buf[:-1]
        buf = ''