pyinotify.threadednotifier, process_* 호출되지 않았습니다
문제
Pyinotify : The Methods에 문제가 있습니다 process_*()
의 ProcessEvent
호출되지 않습니다
코드
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로 테스트했습니다. 내가 무엇을 놓칠 수 있습니까?
해결책
문제는 IN_*의 가져 오기가 누락되어 수동으로 수행되어야합니다. 나는 전화 후 그것을 발견했다
daemon.run()
대신에
daemon.start()
따라서 스크립트가 전경으로 실행됩니다.
다른 팁
마스크는 EventCodes.all_flags에 정의됩니다
mask = EventsCodes.ALL_FLAGS['IN_DELETE']
mask = EventsCodes.ALL_FLAGS['ALL_EVENTS']
제휴하지 않습니다 StackOverflow