2013-09-03 7 views
32

Ludzie, potrzebuję obejrzeć plik dziennika dla zmian. Po przejrzeniu pytań o stackoverflow widzę ludzi polecających "watchdog". Więc staram się sprawdzić, a nie jestem pewien, gdzie dodać kod po zmianie plików:monitorujący plik monitorowania Pythona dla zmian

#!/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() 

Gdzie mogę dodać „got it” w pętli while, jeśli pliki zostały dodane/zmienić?

Dzięki!

+0

użyj przykładu z github – Cmag

+0

przykład na github wciąż nie działa. – Deqing

Odpowiedz

64

Zamiast LoggingEventHandler zdefiniować Handler:

#!/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 jest wywoływana, gdy plik lub katalog jest modyfikowany.

+1

Doskonale, dziękuję! Teraz, jak mogę tylko oglądać konkretny plik, a teraz cały katalog? – Cmag

+2

Nie ma za co. Możesz obejrzeć katalog zawierający plik, a następnie sprawdzić zmienną 'event.src_path' w metodach obsługi. – alecxe

+0

Dodatkowo, możesz obejrzeć konkretny [event] (http://pythonhosted.org/watchdog/api.html#event-classes). – alecxe