检测文件更改没有轮询

我正在尝试使用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。