2017-11-05 10 views
0

特定のログファイルを監視するスクリプトを作成しようとしていますが、.txtファイルを見ることができません。それは他のタイプのファイルとうまく動作します。Python Watchdog-src_path inconsistent

from watchdog.observers import Observer 
from watchdog.events import FileSystemEventHandler 
from os.path import expanduser 

file_to_watch = 'test.txt' 

class FileModifiedHandler(FileSystemEventHandler): 

    def __init__(self, path, file_name, callback): 
     self.file_name = file_name 
     self.callback = callback 

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

    def on_modified(self, event): 

     print "Event: %s" % (event) 
     print "Ends with %s: %s" % (self.file_name, event.src_path.endswith(self.file_name)) 

     if not event.is_directory and event.src_path.endswith(self.file_name): 
      self.callback() 

if __name__ == '__main__': 


    def callback(): 
     print("FILE WAS MODIFIED") 

    FileModifiedHandler('.', file_to_watch, callback) 

私はの.pyファイルにfile_to_watchを設定すると、ログが正しいソースパスを返しますが、私は同じフォルダ内の.txtファイルに変更したときに、それがディレクトリで停止します。私はこの理由が分からない。ここでプログラムが返すものです:

Event: <FileModifiedEvent: src_path='/Users/nick/Documents/Python/WatchdogTest.py'> 
Ends with WatchdogTest.py: True 
FILE WAS MODIFIED 

Event: <DirModifiedEvent: src_path='/Users/nick/Documents/Python'> 
Ends with test.txt: False 

答えて

0

あなたには、いくつかの他の名前にファイルtest.txtの名前を変更することができ、私は/トンのように感じるmytest.txtを言って異なる方法で処理されるか、バイパスへのエスケープシーケンスを追加することができかもしれません。

+0

私はこの問題を解決しました。 TextEdit(Macの場合)でコードを変更してコードをテストしていましたが、別のテキストエディタ(Bracketsを使用)で修正したときに動作しました。たぶんTextEditは既存のファイルを変更するのではなく、新しいファイルを保存するのでしょうか? –

関連する問題