2017-06-23 4 views
0

J'essaie d'écouter les changements du système de fichiers en utilisant le module watchdog de Python. Je veux surveiller les fichiers de deux répertoires différents. Pour une seule montre de dossier, j'ai utilisé PatternMatchingEventHandler de watchdog.events. Je veux utiliser la même chose pour plusieurs répertoires.Python chien de garde pour les fichiers de deux répertoires différents

Code:

import time 
from watchdog.observers import Observer 
from watchdog.events import PatternMatchingEventHandler 

class EventHandler(PatternMatchingEventHandler): 
    def on_modified(self, event): 
     super(EventHandler, self).on_modified(event) 
     print event 

if __name__ == "__main__": 
    dir_name = ["/home/user1/first", "/home/user1/second"] 
    observer = Observer() 
    patterns = ["/home/user1/first/first.log","/home/user1/second/second.log")] 
    for i in xrange(len(dir_name)): 
     event_handler = EventHandler(patterns = patterns[i]) 
     observer.schedule(event_handler, dir_name[i], recursive=True) 
    observer.start() 

    try: 
     while True: 
      time.sleep(0.1) 
    except KeyboardInterrupt: 
     observer.stop() 

Dans le code ci-dessus, j'ai essayé de faire répertoire plusieurs formats d'observation et de créer un gestionnaire d'événements pour chacun des fichiers. Ça ne fonctionne pas pour moi. Y a-t-il quelque chose qui me manque ici? Quel est le moyen de le faire?

Merci.

Répondre

-1

En comparant avec le mien, il manque observer.join() à l'EOF. Essayez avec ça.

EDIT

Essayez ce code ci-dessous:

import time 
from watchdog.observers import Observer 
from watchdog.events import PatternMatchingEventHandler 

class EventHandler(PatternMatchingEventHandler): 
    def on_modified(self, event): 
     super(EventHandler, self).on_modified(event) 
     print event 

if __name__ == "__main__": 
    observer = Observer() 
    patterns = ["/home/user1/first/first.log","/home/user1/second/second.log"] 
    for pattern in patterns: 
     event_handler = EventHandler(patterns=pattern) 
     observer.schedule(event_handler, dir_name[i], recursive=True) 
    observer.start() 

    try: 
     while True: 
      time.sleep(0.1) 
    except KeyboardInterrupt: 
     observer.stop() 
    observer.join() 
+0

Il ne fonctionne pas avec cela. Comment cela va-t-il aider? – wonder

+0

De ce que je sais, bloque le thread à partir de laquelle est appelé le code, de sorte que le programme s'exécute indéfiniment jusqu'à ce qu'il se termine (par un Ctrl-C dans ce cas). Plus d'infos [ici] (http://pythonhosted.org/watchdog/api.html#watchdog.utils.BaseThread.join). Notez qu'il regarde comme un écran noir: faites quelques changements pour voir si le programme fonctionne (il sera sorti). – RompePC

+0

C'est correct. Mais ce n'est pas du tout d'imprimer quoi que ce soit même si les fichiers sont régulièrement modifiés dans les deux répertoires. J'ai essayé de faire 'join()' pour tous les planificateurs d'observateurs. Mais ça ne m'aide pas. – wonder