我正在尝试构建一个跟踪日志文件的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。
答案 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 = ''