2012-08-09 13 views
14

Sto cercando di rilevare quando un file con un nome dato viene creato in una directory. Lo sto facendo grazie a watchdog. La creazione viene rilevata correttamente ma non so come terminare correttamente l'applicazione una volta effettuato il rilevamento.Rileva creazione file con watchdog

Il mio pezzo di codice è il seguente:

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

Sono nuovo di pitone e io non riesco a capire cosa è sbagliato. Il rilevamento sembra essere pianificato in un thread dedicato e il metodo join() è in attesa che questo thread termini. Quindi, suppongo che non stia chiamando il metodo giusto sull'osservatore per interrompere l'attesa/il ciclo, ma la documentazione del watchdog sembra davvero non chiara per indicare quali sono i metodi che possono essere usati.

Fa qualcuno ha un'idea come posso raggiungere il mio obiettivo?

risposta

11

Infine, dopo aver dato un'occhiata all'implementazione del watchdog, non è necessario chiamare unschedule_all prima del stop, ciò avviene automaticamente. La rimozione della riga contenente questa chiamata al metodo risolve il problema e l'applicazione funziona perfettamente.

+0

Grazie per aver postato questo aggiornamento – jgyou