用Python检测新文件或修改文件

5 投票
4 回答
6324 浏览
提问于 2025-04-15 15:20

我想要检测一个文件夹里什么时候有新文件被创建,或者什么时候已有的文件被修改。

我试着找一个可以做到这个的脚本(最好是用python或者bash写的),但是没有找到合适的。我的环境是Linux,使用的是Python 2.6。

相关问题

4 个回答

1

如果你会用PyQt的话,可以用QFileSystemWatcher这个工具,它正好可以实现这个功能。

4

如果你在使用Linux系统,可以试试pyinotify。这个工具就像是一个面向对象的包装器,围绕着inotify(7)系统调用。这个项目的网站上有很多简单明了的教程和示例,可以帮助你更好地理解和使用。

13

你可以使用 gio,这是 GLib 的文件系统部分(在 GLib 的 Python 绑定中)。

import gio

def directory_changed(monitor, file1, file2, evt_type):
   if (evt_type in (gio.FILE_MONITOR_EVENT_CREATED,
       gio.FILE_MONITOR_EVENT_DELETED)):
       print "Changed:", file1, file2, evt_type

gfile = gio.File(".")
monitor = gfile.monitor_directory(gio.FILE_MONITOR_NONE, None)
monitor.connect("changed", directory_changed)

不过,你的程序必须在一个 GLib 的主循环中运行,事件才能到达。测试这一点的一个简单方法是使用:

import glib
ml = glib.MainLoop()
ml.run()

GLib 是一个高级库,非常适合用来开发应用程序。你不需要担心它背后使用了哪个系统来监控文件。


我看到你在使用 Fedora Core 2。真的只有版本 2 吗?这可能太旧了,不适合在 GLib 中使用 GIO。之前提到的 Pyinotify 可能是一个更好的解决方案,尽管它的兼容性较差。

撰写回答