我已经成功地在我的dbus mainloop中使用了io_add_watch
的python绑定来响应已知单个文件中的更改。但我现在有一个案例,我在运行dbus主循环,并且需要在目录更改时才能工作。
我使用了命令行工具inotifywait -m directory
,并使用了pyinotify提供的一些示例。什么不清楚我是如何把两者放在一起的。或者如果我应该。我可以只是启动一个使用管道直接运行inotifywait
的线程,然后写入/run
中的ram文件,我已经建立了io_add_watch
来。我对glib / dbus / mainloop比较新,所以它对我来说仍然是一种魔力。对于我的目的,pyinotify
似乎有点沉重,但我在这里没有经验。
我使用python3在Debian Jessie上运行。我不是在寻找任何跨平台的东西。
答案 0 :(得分: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
答案 1 :(得分:1)
特别是要使用dbus循环编织通知内容,诀窍是使用来自<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-bar-chart-o fa-fw"></i>
Analytics
</h3>
<div class="btn-group" style="float: right;">
<button class="btn">Action</button>
<button class="btn dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="#">Item I</a></li>
<li><a href="#">Item II</a></li>
<li><a href="#">Item III</a></li>
<li class="divider"></li>
<li><a href="#">Other</a></li>
</ul>
</div>
</div>
<div class="panel-body">
<div id="analytics-chart"></div>
</div>
</div>
</div>
</div>
的{{1}}。我使用过这样的东西:
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()
等标准方法提交dbus更改。