2016-04-23 5 views
0

Я успешно использовал привязки python к io_add_watch в своем mainbuop dbus, чтобы реагировать на изменения в известном одном файле. Но теперь у меня есть случай, когда я запускаю главный шлюз dbus, и мне нужно работать, когда каталог меняется.Метод python dbus для просмотра изменения каталога?

Я играл с инструментом командной строки inotifywait -m directory, а также играл с некоторыми примерами, представленными pyinotify. Непонятно, как я объединил их. Или, если я даже должен. I может просто запустить поток, который использует трубу для непосредственного запуска inotifywait, а затем записать в файл ram в /run, который я установил io_add_watch. Я относительно новичок в glib/dbus/mainloop, поэтому для меня это все еще волшебство. pyinotify кажется тяжелым для моих целей, но я не работаю без опыта здесь.

Я работаю на Debian Jessie, используя python3. Я не ищу что-либо кросс-платформу.

ответ

1

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

+0

Это было номинально полезно, и я в конце концов понял это, см. Ответ, который я добавил. Хотелось бы, чтобы это было похоже на это, но вы получаете кредиты за то, что вы меня в правильном направлении. –

1

В частности, ткут уведомит материал в с петлей Dbus, хитрость заключается в том, чтобы использовать ThreadedNotifier из pyinotify. Я что-то вроде этого:

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.

 Смежные вопросы

  • Нет связанных вопросов^_^