Maison  >  Article  >  développement back-end  >  Exemple de chien de garde de surveillance des modifications de fichiers en python

Exemple de chien de garde de surveillance des modifications de fichiers en python

黄舟
黄舟original
2017-10-16 11:03:282233parcourir

Cet article présente principalement l'exemple de surveillance des modifications de fichiers (watchdog) en python. L'éditeur pense qu'il est plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur et jetons un coup d'œil

Il existe deux bibliothèques principales pour la surveillance des fichiers en python, l'une est pyinotify (https://github.com/seb-m/pyinotify/wiki) et l'autre est watchdog ( http://pythonhosted.org/watchdog/). pyinotify s'appuie sur inotify sur la plateforme Linux, qui encapsule les événements sur différentes plateformes. Parce que je l'utilise principalement sur la plate-forme Windows, je me concentrerai sur le chien de garde ci-dessous (il est recommandé de lire le code source d'implémentation du chien de garde, ce qui vous aidera à comprendre en profondeur les principes).

watchdog utilise différentes méthodes pour la détection de fichiers sur différentes plates-formes. Les commentaires suivants ont été trouvés dans init.py :


|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

L'exemple de code est donné comme suit :


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 utilise principalement le modèle d'observateur (c'est absurde, cela se voit au nom de la variable). Il existe trois rôles principaux : observateur, event_handler et dossier surveillé. Les trois sont à l'origine indépendants.Ils sont connectés principalement via la fonction observer.schedule, ce qui signifie que l'observateur détecte et appelle en permanence le code dépendant de la plate-forme pour détecter les modifications dans le dossier de surveillance. Lorsque des modifications sont trouvées, le event_handler est averti pour traitement. . Enfin, je recommande fortement aux lecteurs de lire le code source de watchdog lorsqu'ils en ont le temps. Il est facile à comprendre et a une bonne structure.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn