2017-09-24 2 views
0

이 작업을 해결하기 위해이 http://brunorocha.org/python/watching-a-directory-for-file-changes-with-python.html 예제를 사용했습니다. 그리고 효과가있었습니다. OOP를 사용하지 않은 경우. 이제, 내가 무슨 짓을했는지, OOP에 내 코드를 다시 작성하는 것을 시도하고있다 : 나는 이름 MyHandler.py파이썬에서 파일 변경을위한 디렉토리를 보지 못했습니다.

#!/usr/bin/python3 
# -*- coding: utf-8 -*- 

import sys 

from watchdog.events import PatternMatchingEventHandler 

class MyHandler(PatternMatchingEventHandler): 
    patterns = ["*.xml", "*.lxml"] 

    def __init__(self, logger, myfunction): 
     self.logger = logger 
     self.myfunction = myfunction 

    def process(self, event): 
     """ 
     event.event_type 
      'modified' | 'created' | 'moved' | 'deleted' 
     event.is_directory 
      True | False 
     event.src_path 
      path/to/observed/file 
     """ 
     self.logger.debug("target: {} was {}".format(event.src_path, event.event_type)) 
     self.myfunction() 

    def on_created(self, event): 
     self.process(event) 

다음, 나는의 읽기 기능이 어디 내 다른 파일이 호출 오전에 파일을 생성 XML :

observer = Observer() 
observer.schedule(MyHandler(self.logger, self.read_xml), path=self.mydir) 
observer.start() 

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

observer.join() 

그리고, 내가 가지고이 전화를 시도하고있다 :

내가 오류가
AttributeError: 'MyHandler' object has no attribute '_ignore_directories' 

? OOP 실험을하기 전에 :

class MyHandler(PatternMatchingEventHandler): 
    patterns = ["*.xml*", "*.lxml"] 

    def process(self, event): 
     """ 
     event.event_type 
      'modified' | 'created' | 'moved' | 'deleted' 
     event.is_directory 
      True | False 
     event.src_path 
      path/to/observed/file 
     """ 
     logger.debug("Target: {} was {}".format(event.src_path, event.event_type)) 
     read_xml() 

    def on_created(self, event): 
     self.process(event) 

    if __name__ == "__main__" 

     observer = Observer() 
     observer.schedule(MyHandler(), path=mydir) 
     observer.start() 

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

     observer.join() 

그리고 그것은 효과가있었습니다. 이제 스크립트가 작동하지 않습니다. 도와주세요.

답변

0

당신은 (PatternMatchingEventHandler) 객체 생성자

def __init__(self, logger, myfunction): 
    super().__init__() # <--- Put arguments to PatternMatchingEventHandler if constructor here if needed 
    self.logger = logger 
    self.myfunction = myfunction 

생성자는 _ignore_directories으로 상위 클래스에 필요한 인스턴스 변수의 일부를 설정하기 위해 호출 할 필요가있는 부모를 호출하지 않습니다.

관련 문제