2009-09-28 8 views
3

J'ai un problème avec pyinotify: les méthodes process_*() du ProcessEvent ne sont pas appeléspyinotify.ThreadedNotifier, process_ * pas appelé

Le code

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) 

Tout le reste est connecté. inofity fonctionne correctement, je l'ai testé avec inotifywait. Que puis-je manquer?

+0

êtes-vous sûr que 'self' est nécessaire pour ces méthodes? – SilentGhost

+0

TFM le dit: http://seb.dbzteam.org/pub/python-pyinotify-html/ – Flavius

+0

... ainsi qu'un exemple officiel: http://git.dbzteam.org/pyinotify/tree/examples/ tutorial_threadednotifier.py – Flavius

Répondre

1

Le problème était l'importation de IN_ * qui devait être effectuée manuellement. Je l'ai découvert cela après avoir appelé

daemon.run() 

au lieu de

daemon.start() 

rendant ainsi le script exécuté au premier plan.

1

masques sont définis dans EventCodes.ALL_FLAGS

mask = EventsCodes.ALL_FLAGS['IN_DELETE'] 
mask = EventsCodes.ALL_FLAGS['ALL_EVENTS'] 
Questions connexes