【发布时间】:2010-06-18 10:29:59
【问题描述】:
获取以下演示代码(从GIO answer 到这个问题),它使用 GIO FileMonitor 来监视目录的更改:
import gio
def directory_changed(monitor, file1, file2, evt_type):
print "Changed:", file1, file2, evt_type
gfile = gio.File(".")
monitor = gfile.monitor_directory(gio.FILE_MONITOR_NONE, None)
monitor.connect("changed", directory_changed)
import glib
ml = glib.MainLoop()
ml.run()
运行此代码后,我可以创建和修改子节点并收到更改通知。但是,这仅适用于直系子女(我知道文档没有另外说明)。以下最后一个 shell 命令不会产生通知:
touch one
mkdir two
touch two/three
有没有简单的方法让它递归?我宁愿不手动编写查找目录创建并添加监视器、删除时删除它们等的代码。
预期用途是用于 VCS 文件浏览器扩展,以便能够缓存工作副本中的文件状态并在更改时单独更新它们。因此,可能有数万到数千(或更多)目录需要监控。我只想找到工作副本的根目录并在那里添加文件监视器。
我知道pyinotify,但我避免使用它,以便它可以在非 Linux 内核(如 FreeBSD 或...其他)下工作。据我所知,GIO FileMonitor 在可用的情况下在下面使用 inotify,我可以理解不强调实现以保持某种程度的抽象,但它向我暗示它应该是可能的。
(以防万一,我最初发布在PyGTK mailing list。)
【问题讨论】: