In diesem Artikel wird hauptsächlich das Beispiel zur Dateiänderungsüberwachung (Watchdog) in Python vorgestellt. Der Herausgeber findet es recht gut, daher werde ich es jetzt mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Editor und werfen wir einen Blick darauf
Es gibt zwei Hauptbibliotheken für die Dateiüberwachung in Python, eine ist Pinotify (https://github.com/seb-m/pyinotify/wiki) und die andere ist Watchdog (http://pythonhosted.org/watchdog/). pyinotify basiert auf inotify der Linux-Plattform, das Ereignisse auf verschiedenen Plattformen kapselt. Da ich es hauptsächlich auf der Windows-Plattform verwende, werde ich mich im Folgenden auf Watchdog konzentrieren (es wird empfohlen, dass Sie den Quellcode der Watchdog-Implementierung lesen, der Ihnen hilft, die Prinzipien tiefgreifend zu verstehen).
Watchdog verwendet unterschiedliche Methoden zur Dateierkennung auf verschiedenen Plattformen. Die folgenden Kommentare wurden in init.py gefunden:
|Inotify| Linux 2.6.13+ ``inotify(7)`` based observer |FSEvents| Mac OS X FSEvents based observer |Kqueue| Mac OS X and BSD with kqueue(2) ``kqueue(2)`` based observer |WinApi|(ReadDirectoryChangesW) MS Windows Windows API-based observer |Polling| Any fallback implementation
Der Beispielcode lautet wie folgt:
from watchdog.observers import Observer from watchdog.events import * import time class FileEventHandler(FileSystemEventHandler): def __init__(self): FileSystemEventHandler.__init__(self) def on_moved(self, event): if event.is_directory: print("directory moved from {0} to {1}".format(event.src_path,event.dest_path)) else: print("file moved from {0} to {1}".format(event.src_path,event.dest_path)) def on_created(self, event): if event.is_directory: print("directory created:{0}".format(event.src_path)) else: print("file created:{0}".format(event.src_path)) def on_deleted(self, event): if event.is_directory: print("directory deleted:{0}".format(event.src_path)) else: print("file deleted:{0}".format(event.src_path)) def on_modified(self, event): if event.is_directory: print("directory modified:{0}".format(event.src_path)) else: print("file modified:{0}".format(event.src_path)) if __name__ == "__main__": observer = Observer() event_handler = FileEventHandler() observer.schedule(event_handler,"d:/dcm",True) observer.start() try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join()
Watchdog verwendet hauptsächlich das Beobachtermodell (Unsinn, das erkennt man an der Variablenbenennung). Es gibt drei Hauptrollen: Beobachter, Ereignishandler und überwachter Ordner. Die drei sind ursprünglich unabhängig. Sie sind hauptsächlich über die Funktion „observer.schedule“ verbunden. Dies bedeutet, dass der Beobachter den plattformabhängigen Code kontinuierlich erkennt und aufruft, um Änderungen im Überwachungsordner zu erkennen . Abschließend empfehle ich den Lesern dringend, den Quellcode von Watchdog zu lesen, wenn er Zeit hat. Er ist leicht zu verstehen und hat eine gute Struktur.
Das obige ist der detaillierte Inhalt vonBeispiel für einen Watchdog zur Überwachung von Dateiänderungen in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!