python 用于监视目录更改的 dbus 方法?
python dbus method for watching a directory change?
我已经在我的 dbus 主循环中成功地使用 python 绑定到 io_add_watch
来响应已知单个文件中的更改。但我现在有一个案例,我正在 运行 设置一个 dbus 主循环,并且需要在目录更改时工作。
我玩过命令行工具 inotifywait -m directory
,也玩过 pyinotify 提供的一些示例。不清楚的是我是如何将两者放在一起的。或者如果我什至应该。我 可以 直接启动一个使用管道到 运行 inotifywait
的线程,然后写入我已经建立的 /run
中的 ram 文件一个io_add_watch
来。我对 glib/dbus/mainloop 比较陌生,所以它对我来说仍然有点神奇。 pyinotify
对我来说似乎有点沉重,但我在这里没有任何经验。
我正在 运行使用 Debian Jessie,使用 python3。我不是在寻找任何跨平台的东西。
PyInotify 可以轻松监视一个目录:
notifier = pyinotify.Notifier(wm, handler)
wm.add_watch('/tmp', pyinotify.IN_CREATE)
notifier.loop()
完整教程在这里:https://github.com/seb-m/pyinotify/wiki/Tutorial#1-using-the-notifier-class-without-timeout
特别是要用 dbus 循环编织通知内容,诀窍是使用 pyinotify
中的 ThreadedNotifier
。我使用了这样的东西:
watchManager = pyinotify.WatchManager()
inotifier = pyinotify.ThreadedNotifier(watchManager, FileEventHandler(mainService.eventStream))
inotifier.start()
eventsPath = Path('/Pilot/Schedules')
if not eventsPath.exists():
eventsPath.mkdir()
watchManager.add_watch(eventsPath.as_posix(), pyinotify.IN_CLOSE_WRITE | pyinotify.IN_DELETE, rec=True, auto_add=True)
mainloop = glib.MainLoop()
try:
mainloop.run()
except KeyboardInterrupt:
mainloop.quit()
inotifier.stop()
我的 FileEventHandler
使用标准方法,例如 process_IN_CLOSE_WRITE
然后提交 dbus 更改。
我已经在我的 dbus 主循环中成功地使用 python 绑定到 io_add_watch
来响应已知单个文件中的更改。但我现在有一个案例,我正在 运行 设置一个 dbus 主循环,并且需要在目录更改时工作。
我玩过命令行工具 inotifywait -m directory
,也玩过 pyinotify 提供的一些示例。不清楚的是我是如何将两者放在一起的。或者如果我什至应该。我 可以 直接启动一个使用管道到 运行 inotifywait
的线程,然后写入我已经建立的 /run
中的 ram 文件一个io_add_watch
来。我对 glib/dbus/mainloop 比较陌生,所以它对我来说仍然有点神奇。 pyinotify
对我来说似乎有点沉重,但我在这里没有任何经验。
我正在 运行使用 Debian Jessie,使用 python3。我不是在寻找任何跨平台的东西。
PyInotify 可以轻松监视一个目录:
notifier = pyinotify.Notifier(wm, handler)
wm.add_watch('/tmp', pyinotify.IN_CREATE)
notifier.loop()
完整教程在这里:https://github.com/seb-m/pyinotify/wiki/Tutorial#1-using-the-notifier-class-without-timeout
特别是要用 dbus 循环编织通知内容,诀窍是使用 pyinotify
中的 ThreadedNotifier
。我使用了这样的东西:
watchManager = pyinotify.WatchManager()
inotifier = pyinotify.ThreadedNotifier(watchManager, FileEventHandler(mainService.eventStream))
inotifier.start()
eventsPath = Path('/Pilot/Schedules')
if not eventsPath.exists():
eventsPath.mkdir()
watchManager.add_watch(eventsPath.as_posix(), pyinotify.IN_CLOSE_WRITE | pyinotify.IN_DELETE, rec=True, auto_add=True)
mainloop = glib.MainLoop()
try:
mainloop.run()
except KeyboardInterrupt:
mainloop.quit()
inotifier.stop()
我的 FileEventHandler
使用标准方法,例如 process_IN_CLOSE_WRITE
然后提交 dbus 更改。