如何实现tail -F的pythonic等价物? [英] How to implement a pythonic equivalent of tail -F?
本文介绍了如何实现tail -F的pythonic等价物?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在出现某些关键字时,pythonic 的观察方式是什么?
What is the pythonic way of watching the tail end of a growing file for the occurrence of certain keywords?
在 shell 中我可能会说:
In shell I might say:
tail -f "$file" | grep "$string" | while read hit; do
#stuff
done
推荐答案
嗯,最简单的方法是不断从文件中读取,检查新内容并测试命中率.
Well, the simplest way would be to constantly read from the file, check what's new and test for hits.
import time
def watch(fn, words):
fp = open(fn, 'r')
while True:
new = fp.readline()
# Once all lines are read this just returns ''
# until the file changes and a new line appears
if new:
for word in words:
if word in new:
yield (word, new)
else:
time.sleep(0.5)
fn = 'test.py'
words = ['word']
for hit_word, hit_sentence in watch(fn, words):
print "Found %r in line: %r" % (hit_word, hit_sentence)
这个带有 readline
的解决方案在您知道您的数据将出现在行中时有效.
This solution with readline
works if you know your data will appear in lines.
如果数据是某种流,您需要一个缓冲区,该缓冲区大于您要查找的最大word
,并首先填充它.这样会变得有点复杂...
If the data is some sort of stream you need a buffer, larger than the largest word
you're looking for, and fill it first. It gets a bit more complicated that way...
这篇关于如何实现tail -F的pythonic等价物?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文