Home / Programmazione / Python / Implementare un directory watcher in Python
Mattepuffo

Implementare un directory watcher in Python

Implementare un directory watcher in Python

In altri implementare un dir-watcher non richiede nessuna libreria esterna.

Se vogliamo fare la stessa coas in Python, invece, dobbiamo usare una libreria esterna.

Nel caso specifico useremo Watchdog, che è multi piattaforma, e quindi usabile sia su Linux, che su Mac che su Windows.

Per installarla possiamo usare pip:

pip install watchdog

Sul sito ci sono anche altre alternative di installazione, ma a me pip ha funzionato senza problemi.

A questo punto dovrebbe essere tutto ok, e quindi vediamo un semplice esempio:

import sys
import logging
import time
import os
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 os.path.expanduser("~")
    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()

Approfondiamo un attimo:

  • logging.basicConfig serve per impostare il logging (come si può capire dal nome)
  • il path da controllare è preso dai parametri di input in fase di lancio dello script; se non viene messo ho impostato la HOME come default
  • poi impostiamo un EventHandler per Watchdog
  • poi creiamo un Observer e lo avviamo

A questo punto il programma fa tutto da solo; dovete solo stare davanti alla console per vedere i messaggi (e studiarvi un pò le classi e oggetti usati!).

Enjoy!