Surveillance d'un répertoire en python ************************************** il est parfois utile de pouvoir surveiller un répertoire en temps réel pour générer des actions par exemple. Installation ------------ .. code-block:: bash pip install watchdog Utilisation basique ------------------- Objectif surveiller le répertoire sylob test_watchdog.py .. code-block:: python import sys import time import logging from watchdog.observers import Observer from watchdog.events import LoggingEventHandler if __name__ == "__main__": logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S') path = sys.argv[1] if len(sys.argv) > 1 else '.' event_handler = LoggingEventHandler() observer = Observer() observer.schedule(event_handler, path, recursive=True) observer.start() try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join() utilisation .. code-block:: bash >> python test_watchdog.py sylob/ 2014-06-19 15:09:23 - Deleted file: C:\Users\f.aoustin\Desktop\sylob\1.txt 2014-06-19 15:09:40 - Created file: C:\Users\f.aoustin\Desktop\sylob\ServiceInformatique.docx 2014-06-19 15:09:40 - Modified file: C:\Users\f.aoustin\Desktop\sylob\ServiceInformatique.docx 2014-06-19 15:09:47 - Moved file: from C:\Users\f.aoustin\Desktop\sylob\ServiceInformatique.docx to C:\Users\f.aoustin\Desktop\sylob\tutu.docx 2014-06-19 15:09:47 - Modified file: C:\Users\f.aoustin\Desktop\sylob\tutu.docx Utilisation en ligne de commande -------------------------------- .. code-block:: bash watchmedo log --patterns="*.py;*.txt" --ignore-directories --recursive . lancer une commande à chaque évènement watchmedo log --patterns="*.py;*.txt" --recursive --command='echo "${watch_src_path}"' . Utilisation avancée ------------------- Il est possible de créer ses propres handlers .. code-block:: python import sys import time import logging import time from watchdog.observers import Observer from watchdog.events import PatternMatchingEventHandler class MyHandler(PatternMatchingEventHandler): patterns = ["*.xml", "*.lxml"] def process(self, event): """ event.event_type 'modified' | 'created' | 'moved' | 'deleted' event.is_directory True | False event.src_path path/to/observed/file """ # the file will be processed there print event.src_path, event.event_type # print now only for degug def on_modified(self, event): self.process(event) def on_created(self, event): self.process(event) if __name__ == '__main__': args = sys.argv[1:] observer = Observer() observer.schedule(MyHandler(), path=args[0] if args else '.') observer.start() try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join() utilisation .. code-block:: bash >> python test_watchdog.py sylob/ C:\Users\f.aoustin\Desktop\sylob\log.xml modified C:\Users\f.aoustin\Desktop\sylob\log.xml modified C:\Users\f.aoustin\Desktop\sylob\log.xml modified .. note:: il existe d'autres action comme on_moved, on_deleted