2012-08-09 6 views
14

주어진 이름의 파일이 디렉토리에 생성 된 것을 감지하려고합니다. 나는 watchdog 덕분에 그것을하고있다. 생성이 올바르게 감지되었지만 감지가 완료되면 응용 프로그램을 올바르게 종료하는 방법을 알지 못합니다.워치 독을 사용하여 파일 생성을 감지하십시오.

코드의 내 작품은 다음과 같다 :

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

내가 파이썬에 새로운 오전과 내가 잘못이 무엇인지 알아낼 수 없습니다. 검색은 전용 스레드에서 스케줄 된 것으로 보이며 join() 메소드는이 스레드가 종료되기를 기다리고 있습니다. 따라서 관찰자에게 대기/반복을 중지하는 올바른 방법을 부르지는 않을 것이라고 생각하지만 워치 독 문서는 실제로 사용할 수있는 방법이 무엇인지 알려주지 못합니다.

누군가 내 목표를 달성 할 수있는 아이디어가 있습니까?

답변

11

마지막으로, 워치 독 구현을 살펴본 후에 stop 전에 unschedule_all을 호출 할 필요는 없습니다. 이는 자동으로 수행됩니다. 이 메서드 호출을 포함하는 줄을 제거하면 문제가 해결되고 응용 프로그램이 완벽하게 실행됩니다.

+0

이 업데이트를 게시 주셔서 감사합니다. – jgyou