2016-04-23 5 views
0

既知の単一ファイルの変更に反応するために、私のdbus mainloopにio_add_watchのpythonバインディングを使用しました。しかし、私は今dbusのメインループを実行しているところがあり、ディレクトリが変わったときには作業をする必要があります。ディレクトリの変更を監視するためのpython dbusメソッド?

私はコマンドラインツールinotifywait -m directoryで遊んだり、pyinotifyで提供されているいくつかの例を試してみました。どのように私は2つを一緒に置くかわかりません。それとももし私がすべきなら。私ちょうどinotifywaitを実行するためにパイプを使用してスレッドを起動し、私はio_add_watchを確立した/runのRAMファイルに書き込みます。私は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が、その後のdbus変更を送信するためにこのようなprocess_IN_CLOSE_WRITEのような標準的な方法を使用する:私はこのようなものを使用しました。