我正在尝试使用Python程序中的方法来检测文件系统上的文件是否已被修改。我知道我可以在每5秒钟运行一次以检查系统的最后修改日期,但我很好奇是否有更简单的方法来执行此操作,而无需要求我的程序重复检查
有谁知道这种方法?
答案 0 :(得分:77)
用于观看目录的优秀跨平台库。
来自网站
支持的平台
Linux 2.6(inotify)
Mac OS X(FSEvents,kqueue)
FreeBSD / BSD(kqueue)
Windows(带有I / O完成端口的ReadDirectoryChangesW; ReadDirectoryChangesW工作线程)
独立于操作系统(轮询磁盘以查找目录快照并定期进行比较;慢速且不推荐)
我已经在几个项目中使用它,它似乎工作得非常好。
答案 1 :(得分:43)
对于linux,有pyinotify。
从主页:
Pyinotify是一个Python模块 监视文件系统的变化。 Pyinotify依赖于Linux内核 功能(在内核2.6.13中合并) 叫inotify。 inotify是一个 事件驱动的通知器,它的 通知从内核导出 通过三个空间到用户空间 系统调用。 pyinotify结合这些 系统调用并提供 在他们提供的基础上实施 一种通用和抽象的方式 操纵这些功能。
因此,它显然不是跨平台的,而是依赖于足够新的内核版本。但是,据我所知,任何非轮询机制都需要内核支持。
答案 2 :(得分:6)
在Windows上有:
watcher,这是.NET FileSystemWatcher API的一个很好的python端口。
还有(我写的那个)dirwatch。
两者都依赖于Windows ReadDirectoryChangesW功能。虽然对于实际工作,我会使用watcher(适当的C扩展,良好的API,python 2& 3支持)。
我的主要是在Windows上调用相关API的实验,所以如果你想要一个从python调用这些东西的例子,这很有趣。
答案 3 :(得分:4)
您还应该看到inotifyx与前面提到的pyinotify非常相似,但据说其API变化较小。