In diesem Tutorial sehen wir uns an, wie wir Dateiänderungen mit Python überwachen können. Wir werden Watchdog verwenden, eine Python-Bibliothek, die APIs und Shell-Dienstprogramme bietet, um Dateiänderungen mit Python zu überwachen. Wir werfen einen Blick darauf, wie es funktioniert, wofür es verwendet werden kann, und geben einen Einblick, wie Sie es verwenden können, um Dateisystemereignisse in Ihren eigenen Anwendungen zu überwachen.

Was ist Python Watchdog?

Watchdog ist eine Open-Source-Anwendung, mit der Sie Dateiänderungen mit Python überwachen können. Watchdog kann für eine Reihe allgemeiner Aufgaben verwendet werden, wie zum Beispiel das Überwachen von Änderungen in Dateisystemen, das Überwachen von Dateisystemereignissen und das Überwachen des Dateisystemverzeichnisses. Watchdog funktioniert durch die Registrierung von Dateisystem-Ereignishandlern, die ausgelöst werden, wenn das entsprechende Ereignis auftritt. Handler können als Reaktion auf Ereignisse in einer einzelnen Datei oder auf alle Ereignisse in einem Verzeichnis registriert werden. Benutzer können auch mehrere Ereignishandler bereitstellen und Shell-Skripte ausführen, wenn ein Ereignis ausgelöst wird.

Watchdog ist eine Python-Bibliothek, die API- und Shell-Dienstprogramme bereitstellt, um Dateiänderungen mit Python zu überwachen. Ereignisse umfassen Änderungen an Dateien, Änderungen an der Liste von Dateien in einem Verzeichnis und Änderungen an Datei-Metadaten wie z. B. Zugriffskontrolllisten. Änderungen an Dateimetadaten werden ebenfalls überwacht, einschließlich Dateibesitz, Dateigruppe, Datei-Flags und Dateizugriffskontrollliste.

Voraussetzungen

Um sicherzustellen, dass Dateien auf Ihrem Computer vorhanden sind und ordnungsgemäß funktionieren, kann es für Sie wichtig sein, einen Rahmen einzurichten, um ihren Verbleib und ihre Konsistenz im Laufe der Zeit zu verfolgen. Dazu benötigen Sie Folgendes:

Betriebssystemabhängigkeit (Zeile)WindowsLinux Mac OS X/Darwin
XCodeNoNoYes
PyYAMLYesYesYes
arghYesYesYes
argparseYesYesYes
select_backport (Python 2.6)YesYesYes
pathtoolsYesYesYes

Watchdog selbst kann einfach mit folgendem Befehl installiert werden:

pip3 install watchdog

Oder es kann wie folgt aus dem Code-Repository installiert werden:

git clone --recursive git://github.com/gorakhargosh/watchdog.git
cd watchdog
python3 setup.py install

die Implementierung

Die Hauptbausteine ​​von Watchdog basieren auf zwei Teilen, dem Watcher und Observer und dem Event-Handler.

Watcher

Die Beobachterklasse ist das Herzstück dieses Rezepts. Es überwacht Dateiänderungen mit Python und dem an es übergebenen Verzeichnis und überwacht alle Dateien sowie alle Unterverzeichnisse, die erstellt werden. Das Watcher-Objekt erkennt Änderungen an Dateien in dem Ordner, den es überwacht, und löst jedes Mal ein Ereignis für Ihre Anwendung aus, wenn eine solche Änderung auftritt. Wenn irgendwo innerhalb des überwachten Verzeichnisses (oder Unterverzeichnisses) eine Änderung auftritt, wird die Aufrufmethode mit einem Hash aufgerufen, der Details zur Änderung enthält.

Handler

Das Handler-Objekt wendet Ihren Code an, um zu bestimmen, was mit den vom Watcher empfangenen Ereignissen zu tun ist. Ein Handler wird von Ihnen geschrieben und Sie können entscheiden, was Sie damit machen möchten, z. B. ihn nur live anzeigen, ihn irgendwo speichern oder einige Aufgaben automatisieren. Es könnte auch aus Sicherheitsgründen auf Websites verwendet werden.

Die Watchdog-Implementierung kann einfach in jedem Projekt durchgeführt werden, indem man der Methode folgt:

  1. Erstellen Sie eine Instanz von watchdog.observers. Beobachter-Thread-Klasse. Das Entwurfsmuster Observer eignet sich gut zum Erstellen eines Threads, der auf Ereignisse reagiert.
  2. Implementieren Sie eine Unterklasse von watchdog.events.FileSystemEventHandler (oder fügen Sie einfach watchdog.events.LoggingEventHandler hinzu).
  3. Legen Sie die zu überwachenden Pfade fest, wobei die Beobachterinstanz den Ereignishandler anhängt.
  4. Starten Sie den Beobachter-Thread und überwachen Sie Dateiänderungen mit Python.

Hinweis: Standardmäßig überwacht eine watchdog.observers. Observer-Instanz keine Unterverzeichnisse, nur durch die Übergabe von ‚recursive=True‘ im Aufruf kann sie Unterverzeichnisse überwachen

der Code

Das Einrichten von Watchdog ist ziemlich einfach. Sie müssen nur zuerst den Dateisystem-Ereignishandler registrieren, den Sie verwenden möchten, dann auf das Eintreten von Ereignissen warten und schließlich entsprechend handeln. Wenn Sie beispielsweise jedes Mal benachrichtigt werden möchten, wenn ein Verzeichnis oder eine Datei ihren Status innerhalb des Betriebssystems Ihrer Anwendung ändert (z oder alle Dateien in einem bestimmten Verzeichnis. Der Handler wird auch ausgelöst, wenn eines der Kerndateiattribute – einschließlich der geänderten Zeit oder des Verzeichnisses – aktualisiert wird. Sie können das Beispiel unten sehen:

import sys
import time
import logging
from watchdog.observers import Observer  #creating an instance of the watchdog.observers.Observer from watchdogs class.
from watchdog.events import LoggingEventHandler  #implementing a subclass of watchdog.events.FileSystemEventHandler which is LoggingEventHandler in our case

if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s - %(message)s')
    path = sys.argv[1] if len(sys.argv) > 1 else '.'
    event_handler = LoggingEventHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)  #Scheduling monitoring of a path with the observer instance and event handler. There is 'recursive=True' because only with it enabled, watchdog.observers.Observer can monitor sub-directories
    observer.start()  #for starting the observer thread
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

Hier sehen Sie, dass der Pfad zu dem Verzeichnis ist, in dem sich die Datei gerade befindet, können Sie jedoch wie folgt einstellen:

path = (r"you files path")

Außerdem müssen wir das r vor den Pfad setzen, damit es ein Rohstring wird und das Programm genau weiß, wo es danach suchen muss. Führen Sie danach den Dateinamen im Terminal als Befehl zum Starten der Anwendung aus.

Ausgabe

Wenn die Anwendung erfolgreich war, sehen Sie keine Antwort, aber auch keine Fehler. Sie sollten jetzt ein leeres Terminal sehen, das ungefähr so ​​​​ähnlich ist:

Versuchen Sie nun, einige Dateien auszuführen, in denen Sie den Pfad festgelegt haben, oder wenn Sie die Schritte genau wie oben befolgt haben, haben Sie diese Datei dort erstellt. Führen Sie einige Dateien aus oder fügen Sie dort einige neue hinzu und sollten einige Ergebnisse im Terminal ausdrucken, etwa so:

Sie können die Uhrzeit und die Nachricht hier sehen, wie wir oben im Code selbst angegeben haben, es gibt derzeit den Speicherort der Dateien und ihren Namen als Nachricht aus.

Letzte Worte

Das ist es! Hier haben wir eine einfache Anwendung erstellt, um die Dateiänderungen in unserem System mithilfe der Python-Watchdog-Bibliothek zu überwachen. Es ist eine sehr vielseitige Bibliothek, die nicht nur zum Überwachen von Dateiänderungen, sondern auch zu deren Automatisierung verwendet werden kann. Es wird häufig bei Maisjobs auf unterstützten Systemen verwendet und kann auch auf Websites für viele Zwecke einschließlich der Sicherheit verwendet werden! Und dies sind nur einige davon. Es bietet jede Menge Funktionen, die Sie aus ihrer unglaublichen Dokumentation lernen oder ihren Code auf ihrem GitHub besser kennenlernen können.

Lassen Sie uns kurz zusammenfassen, um alles zusammenzufassen:

Zuerst installieren wir alle Voraussetzungen, die zum Ausführen des Watchdogs erforderlich sind.

Als nächstes haben wir die verfügbaren Funktionen eingehend untersucht und eine grundlegende Implementierung davon ausprobiert. Wir haben eine Unterklasse von FileSystemEventHandler erstellt und als Eingabeparameter an das Observer-Objekt übergeben. Von dort aus löst der eingegebene FileSystemEventHandler Ereignisse aus, die entsprechende Funktionen aufrufen, wenn Änderungen an den Dateien oder Ordnern im Verzeichnis vorgenommen werden.

Schließlich haben wir einige Tests über das Erstellen, Ändern und Löschen einiger Dateien durchgeführt.

Hier sind einige nützliche Tutorials, die Sie lesen können: