2017-09-24 14 views
0

このタスクを解決するには、このhttp://brunorocha.org/python/watching-a-directory-for-file-changes-with-python.htmlの例を使用しました。そしてそれは働いた。 OOPを使用していないとき。さて、私が何をしたか、OOPに私のコードを書き換えるしようとしています: 私は名前のファイルを作成しMyHandler.pyPythonでファイルが変更されるディレクトリを調べることができません。

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

あなたは、オブジェクトのコンストラクタは、コンストラクタは、このような_ignore_directoriesとして親クラスに必要なインスタンス変数のいくつかを設定するために呼び出される必要がある

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

PatternMatchingEventHandler)親を呼び出していません。

関連する問題