检测文件更改没有轮询
我正在尝试使用Python程序中的方法来检测文件系统上的文件是否已被修改。 我知道我可以每隔5秒钟运行一次,检查系统的最后修改date,但是我很好奇,是否有更简单的方法来执行此操作,而不需要我的程序重复检查。
有谁知道这样的方法?
对于Linux,有pyinotify 。
从主页:
Pyinotify是一个用于监视文件系统更改的Python模块。 Pyinotify依靠一个名为inotify的Linux内核特性(在内核2.6.13中合并)。 inotify是事件驱动的通知程序,它的通知通过三次系统调用从内核空间导出到用户空间。 pyinotify绑定这些系统调用,并提供一个实现,提供一个通用的和抽象的方式来操纵这些function。
因此显然不是跨平台的,而是依赖于一个足够新的内核版本。 但是,据我所知,任何非轮询机制都需要内核支持。
看家狗
用于观看目录的优秀跨平台库。
来自网站
支持的平台
Linux 2.6(inotify)
Mac OS X(FSEvents,kqueue)
FreeBSD / BSD(kqueue)
Windows(具有I / O完成端口的ReadDirectoryChangesW; ReadDirectoryChangesW工作线程)
与操作系统无关(轮询磁盘以查找目录快照并定期进行比较;速度慢并且不推荐)
我已经在一些项目上使用它,似乎奇妙地工作。
在窗户上有:
监视器 ,这是.NET FileSystemWatcher API的一个很好的python端口。
还有(我写的) dirwatch 。
两者都依赖于ReadDirectoryChangesW函数。 尽pipe对于真正的工作,我会使用观察者 (适当的C扩展,良好的API,python2和3支持)。
我主要是一个在Windows上调用相关API的实验,所以如果你想要一个从python调用这些东西的例子,那只是一个有趣的事情。
你还应该看到与之前提到的pyinotify非常相似的inotifyx,但据说有一个API变化较less。