2013-09-03 17 views
32

Gente, ho bisogno di guardare un file di registro per le modifiche. Dopo aver esaminato le domande sullo stackoverflow, vedo le persone che raccomandano "watchdog". Così sto cercando di testare, e non sono sicuro dove aggiungere il codice per quando i file cambiano:file di monitoraggio del watchdog python per le modifiche

#!/usr/bin/python 
import time 
from watchdog.observers import Observer 
from watchdog.events import LoggingEventHandler 

if __name__ == "__main__": 
event_handler = LoggingEventHandler() 
observer = Observer() 
observer.schedule(event_handler, path='.', recursive=False) 
observer.start() 
try: 
    while True: 
     time.sleep(1) 
    else: 
     print "got it" 
except KeyboardInterrupt: 
    observer.stop() 
observer.join() 

Dove faccio ad aggiungere il "capito", nel ciclo while, se sono stati aggiunti i file/cambiato?

Grazie!

+0

utilizzare l'esempio dall'esempio github – Cmag

+0

su github non funziona ancora. – Deqing

risposta

64

Invece di LoggingEventHandler definire il vostro gestore:

#!/usr/bin/python 
import time 
from watchdog.observers import Observer 
from watchdog.events import FileSystemEventHandler 


class MyHandler(FileSystemEventHandler): 
    def on_modified(self, event): 
     print "Got it!" 


if __name__ == "__main__": 
    event_handler = MyHandler() 
    observer = Observer() 
    observer.schedule(event_handler, path='.', recursive=False) 
    observer.start() 

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

on_modified viene chiamato quando un file o una directory viene modificato.

+1

Eccellente, grazie! Ora, come potrei guardare solo un determinato file e ora l'intera directory? – Cmag

+2

Prego. È possibile controllare la directory che contiene il file, quindi verificare la variabile 'event.src_path' nei metodi del gestore. – alecxe

+0

E, inoltre, è possibile guardare particolari [eventi] (http://pythonhosted.org/watchdog/api.html#event-classes). – alecxe