如何在Python中异步获取文件的差异

问题描述:

我正在编写一个显示日志文件的tail的Web应用程序组件。如何在Python中异步获取文件的差异

我目前的尝试是使用网络套接字发送文件中的更改,确保我有少于n行,并将其粘贴到文本区域中。

我目前的问题是如何在Python中为日志文件生成'on change'事件。

我可以想象用shutil创建副本some_copy.log检测some_log.log变化,检测最后一次的文件是用os.path.getmtime改变,采取diff和发射的变化。这种效率低下。

有没有人有建议使用Python异步检测文件的变化?我正在使用Python 2.7.6。

+1

我想这个问题已被问到:[detect-file-change-without-polling](http://stackoverflow.com/questions/5738442/detect-file-change-without-polling) – Benjamin

+0

@Benjamin这些工具大部分都是目录观察者,而不是文件观察者。此外,他们中的大多数已被放弃。 – erip

我会为未来的读者添加这个,但如果其他人想要提出其他想法,我会很乐意接受他们。

我发现了一个名为tailer的包,它是unix tail程序的一个包装。粗略地在pythonic伪代码中,我打算在单独的线程中执行以下操作:

for line in tailer.follow(open('some_log.log')): 
    emit(line)