用Python监视文件变化
jopen
10年前
第一种方式:
#!/usr/bin/env python #coding=utf-8 import os import gtk import gobject from pyinotify import WatchManager, Notifier, ProcessEvent, ThreadedNotifier, IN_DELETE, IN_CREATE,IN_MOVED_TO,IN_MOVED_FROM class hechao(ProcessEvent): def process_IN_CREATE(self, event): print "创建文件: %s " % os.path.join(event.path, event.name) def process_IN_DELETE(self, event): print "删除文件: %s " % os.path.join(event.path, event.name) def process_IN_MOVED_TO(self, event): print "移来文件: %s " % os.path.join(event.path, event.name) def process_IN_MOVED_FROM(self, event): print "移走文件: %s " % os.path.join(event.path, event.name) path = "/home/hechao/.gnomenu/favorites" gobject.threads_init() wm = WatchManager() mask = IN_DELETE|IN_CREATE|IN_MOVED_TO|IN_MOVED_FROM notifier = ThreadedNotifier(wm, hechao()) wm.add_watch(path, mask,rec=True) notifier.start() def __quit(widget): notifier.stop() gtk.main_quit() if __name__ == "__main__": win = gtk.Window() win.connect("destroy",__quit) win.show() gtk.main()
第二种方式:
import gio def directory_changed(monitor, file1, file2, evt_type): print evt_type if evt_type == gio.FILE_MONITOR_EVENT_CREATED or evt_type == gio.FILE_MONITOR_EVENT_DELETED: print "测试成功!" print "变化:",evt_type print type(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()
再加一个定时器就OK了。