Heim  >  Artikel  >  Backend-Entwicklung  >  Beispiel für einen Watchdog zur Überwachung von Dateiänderungen in Python

Beispiel für einen Watchdog zur Überwachung von Dateiänderungen in Python

黄舟
黄舟Original
2017-10-16 11:03:282242Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn