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!
python watcher wathcdog observer logging loggingeventhandler pip
Commentami!