2012-08-09 16 views
14

Próbuję wykryć, kiedy plik o danej nazwie zostanie utworzony w katalogu. Robię to dzięki watchdog. Tworzenie zostało poprawnie wykryte, ale nie wiem, jak poprawnie zakończyć aplikację po zakończeniu wykrywania.Wykryj tworzenie pliku za pomocą watchdog

Mój kawałek kodu jest następujący:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import logging 
import sys 
import time 

from watchdog.events import FileSystemEventHandler 
from watchdog.observers import Observer 

logging.basicConfig(level=logging.ERROR) 

class MyEventHandler(FileSystemEventHandler): 
    def __init__(self, observer, filename): 
     self.observer = observer 
     self.filename = filename 

    def on_created(self, event): 
     print "e=", event 
     if not event.is_directory and event.src_path.endswith(self.filename): 
      print "file created" 
      self.observer.unschedule_all() 
      self.observer.stop() 

def main(argv=None): 
    path = argv[1] 
    filename = argv[2] 

    observer = Observer() 
    event_handler = MyEventHandler(observer, filename) 

    observer.schedule(event_handler, path, recursive=False) 
    observer.start() 
    observer.join() 

    return 0 

if __name__ == "__main__": 
    sys.exit(main(sys.argv)) 

Jestem nowym python i nie mogę dowiedzieć się, co jest nie tak. Wykrywanie wydaje się być zaplanowane w dedykowanym wątku, a metoda join() oczekuje na zakończenie tego wątku. Tak więc, przypuszczam, że nie nazywam właściwej metody dla obserwatora, aby zatrzymać czekanie/pętlę, ale dokumentacja watchdoga wydaje się naprawdę nieoczywistą wskazać, jakie są metody, które mogą być użyte.

Czy ktoś ma pomysł, w jaki sposób mogę osiągnąć mój cel?

Odpowiedz

11

Na koniec, po przyjrzeniu się implementacji watchdog, nie jest konieczne wywoływanie unschedule_all przed stop, odbywa się to automatycznie. Usunięcie linii zawierającej to wywołanie metody rozwiązuje problem, a aplikacja działa idealnie.

+0

Dziękujemy za opublikowanie tej aktualizacji – jgyou

Powiązane problemy