pyinotify.ThreadedNotifier,process_* 未调用
Posted
技术标签:
【中文标题】pyinotify.ThreadedNotifier,process_* 未调用【英文标题】:pyinotify.ThreadedNotifier, process_* not called 【发布时间】:2009-09-28 10:02:14 【问题描述】:我有一个pyinotify的问题:ProcessEvent
的方法process_*()
没有被调用
代码
import sys, time, syslog
from pyinotify import WatchManager, Notifier, ThreadedNotifier, ProcessEvent, EventsCodes
from daemon import Daemon
class PTmp(ProcessEvent):
def process_IN_CREATE(self, event):
syslog.syslog("creating: " + event.pathname)
def process_IN_DELETE(self, event):
syslog.syslog("creating: " + event.pathname)
def process_default(self, event):
syslog.syslog("default: " + event.pathname)
class MyDaemon(Daemon):
def run(self):
syslog.openlog('archmind',syslog.LOG_PID,syslog.LOG_DAEMON)
syslog.syslog('daemon started, entering loop')
wm = WatchManager()
mask = IN_DELETE | IN_CREATE
notifier = ThreadedNotifier(wm, PTmp())
notifier.start()
wdd = wm.add_watch('/tmp', mask, rec=True)
while True:
time.sleep(1)
wm.rm_watch(wdd.values())
notifier.stop()
syslog.syslog('exiting loop')
syslog.closelog()
if __name__ == "__main__":
daemon = MyDaemon('/tmp/archmind.pid')
if len(sys.argv) == 2:
if 'start' == sys.argv[1]:
daemon.start()
elif 'stop' == sys.argv[1]:
daemon.stop()
elif 'restart' == sys.argv[1]:
daemon.restart()
else:
print "Unknown command"
sys.exit(2)
sys.exit(0)
else:
print "usage: %s start|stop|restart" % sys.argv[0]
sys.exit(2)
其他所有内容都会记录下来。 inofity 工作正常,我已经用 inotifywait 对其进行了测试。我可能缺少什么?
【问题讨论】:
你确定这些方法需要self
吗?
TFM 这么说:seb.dbzteam.org/pub/python-pyinotify-html
...以及官方示例:git.dbzteam.org/pyinotify/tree/examples/…
【参考方案1】:
问题是缺少 IN_* 的导入,这必须手动完成。我打电话后发现了
daemon.run()
而不是
daemon.start()
从而使脚本在前台运行。
【讨论】:
【参考方案2】:掩码在 EventCodes.ALL_FLAGS 中定义
mask = EventsCodes.ALL_FLAGS['IN_DELETE']
mask = EventsCodes.ALL_FLAGS['ALL_EVENTS']
【讨论】:
以上是关于pyinotify.ThreadedNotifier,process_* 未调用的主要内容,如果未能解决你的问题,请参考以下文章