Python 在不轮询的情况下检测文件更改

Python 在不轮询的情况下检测文件更改,python,Python,我试图在Python程序中使用一种方法来检测文件系统中的文件是否已被修改。我知道我可以每5秒运行一次,检查系统的最后修改日期,但我很好奇是否有一种更简单的方法可以做到这一点,而不需要我的程序反复检查 有人知道这样的方法吗?对于linux,有 从主页: Pyinotify是用于 监视文件系统更改。 Pyinotify依赖于Linux内核 特性(合并到内核2.6.13中) 叫做inotify。inotify是一个 事件驱动通知程序 通知从内核导出 空间到用户空间通过三个 系统调用。pyinotify

我试图在Python程序中使用一种方法来检测文件系统中的文件是否已被修改。我知道我可以每5秒运行一次,检查系统的最后修改日期,但我很好奇是否有一种更简单的方法可以做到这一点,而不需要我的程序反复检查

有人知道这样的方法吗?

对于linux,有

从主页:

Pyinotify是用于 监视文件系统更改。 Pyinotify依赖于Linux内核 特性(合并到内核2.6.13中) 叫做inotify。inotify是一个 事件驱动通知程序 通知从内核导出 空间到用户空间通过三个 系统调用。pyinotify结合这些 系统调用并提供 在它们之上的实现提供 一种通用的、抽象的方法 操纵这些功能

因此,它显然不是跨平台的,并且依赖于足够新的内核版本。然而,据我所知,任何非轮询机制都需要内核支持。

您还应该看到它与前面提到的pyinotify非常相似,但据说它有一个变化较小的API。

在windows上有:

,这是.NET FileSystemWatcher API的一个不错的python端口

还有(我写的那个)

两者都依赖于windows功能。虽然在实际工作中,我会使用(适当的C扩展、良好的API、python 2和3支持)

我的主要是在windows上调用相关API的实验,因此,如果您想要从python调用这些东西的示例,这才是有趣的

用于查看目录的优秀跨平台库

从网站

支持的平台

  • Linux 2.6(inotify)

  • Mac OS X(FSEvents、kqueue)

  • FreeBSD/BSD(kqueue)

  • Windows(带I/O完成端口的ReadDirectoryChangesW;ReadDirectoryChangesW工作线程)

  • 独立于操作系统(轮询磁盘中的目录快照并定期比较;速度慢,不推荐使用)


我在几个项目中使用过它,它似乎工作得很好。

什么平台?Windows有一个系统服务,用于在目录或文件发生更改时登记回调。Linux,但我更喜欢使程序跨平台兼容。如果您正在为Windows编程,您可能会考虑.NET文件系统监视程序。TobiasKienzler就是这样,这个问题想看一个文件。命令行工具非常适合在开发中使用。谢谢你的提示。从watchdog网站上给出的示例来看,它似乎需要轮询。@ZauberParacelsus:不需要。该示例使用
time.sleep(1)
来保持示例的活动状态,但watchdog实际上是异步的,在发生文件更改事件时将调用事件处理程序。看起来watchdog只对目录有效。是否有一种方法可以在不使用poling(使用kernels inotify)的情况下监视非目录文件的更改?pyinotify是否可以用于检测用于修改文件的特定程序?该程序是否仍然有效?此软件包不存在more@AshokaLella:包确实存在,但项目已从SF移动到github。我已经更新了链接。watcher似乎已经被抛弃了一段时间,并且缺乏适当的文档。是的,自2011年以来,情况发生了变化。。。现在看来看门狗是最好的选择。