2017-11-05 3 views
0

Ich versuche, ein Skript zu schreiben, das eine bestimmte Protokolldatei für die Änderung überwacht, aber ich kann es nicht sehen, TXT-Dateien zu sehen. Es funktioniert gut mit anderen Dateitypen.Python Watchdog - src_path inkonsistent

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) 

Als ich eingestellt file_to_watch auf eine Py-Datei, kehrt das Protokoll des korrekten Quellenpfad, aber wenn ich es in eine TXT-Datei im selben Ordner zu ändern, hält es im Verzeichnis. Ich bin mir nicht sicher, was der Grund dafür ist. Hier ist, was das Programm kehrt:

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 

Antwort

0

Sie Datei test.txt in einen anderen Namen benennen kann sagen mytest.txt Ich fühle mich wie/t anders behandelt wird, oder kann Sie Escape-Sequenz Bypass hinzufügen können.

+0

Ich löste das Problem. Ich habe den Code getestet, indem ich TextEdit (auf Mac) geändert habe, aber wenn ich in einem anderen Texteditor (ich habe Brackets) geändert habe, hat es angefangen zu arbeiten. Vielleicht speichert TextEdit eine neue Datei, anstatt die vorhandene zu ändern? –