Saltar al contenido

¿Cómo ejecutar una función cuando algo cambia en un directorio con Python Watchdog?

Hola usuario de nuestro sitio web, encontramos la respuesta a lo que buscabas, deslízate y la encontrarás más abajo.

Solución:

Necesita subclasificar y hacer lo que quiera en el despacho:

import sys
import time
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler

class Event(LoggingEventHandler):
    def dispatch(self, event):
        print("Foobar")

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 = Event()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

Si ejecutas el código verás Foobar se emite cada vez que se detecta un cambio, para ignorar los archivos que puede necesitar usar [events.PatternMatchingEventHandler][1]. Hay varios métodos en cada

Para hacer algo cuando se modifica un caso, podemos anular on_modified:

class Event(LoggingEventHandler):
    def on_modified(self, event):
        print("Doh")

Y ejecutando el código usando la clase anterior con event_handler = Event() y cambiar un archivo generará algo como:

Doh
Doh
Doh
Doh
Doh
Doh
Doh
2015-10-03 15:33:55 - Created file: ./test.txt___jb_bak___
2015-10-03 15:33:55 - Moved file: from ./test.txt to ./test.txt___jb_old___
2015-10-03 15:33:55 - Moved file: from ./test.txt___jb_bak___ to ./test.txt
2015-10-03 15:33:55 - Deleted file: ./test.txt___jb_old___
Doh

[1]: http://pythonhosted.org/watchdog/api.html#watchdog.events.PatternMatchingEventHandler EventHandler clase que puede anular, todo depende de lo que quiera hacer. El LoggingEventHandler la clase en sí es una subclase de watchdog.events.FileSystemEventHandler:

clase watchdog.events.FileSystemEventHandler
Bases: objeto

Base file system event handler that you can override methods from.

despacho (evento)
Envía eventos a los métodos apropiados.

Parameters: event (FileSystemEvent) – The event object representing the file system event.

en_cualquier_evento(evento)
Controlador de eventos catch-all.

Parameters: event (FileSystemEvent) – The event object representing the file system event.

on_created(evento)
Se llama cuando se crea un archivo o directorio.

Parameters: event (DirCreatedEvent or FileCreatedEvent) – Event representing file/directory creation.

on_deleted(evento)
Se llama cuando se elimina un archivo o directorio.

Parameters: event (DirDeletedEvent or FileDeletedEvent) – Event representing file/directory deletion.

on_modified(evento)
Se llama cuando se modifica un archivo o directorio.

Parameters: event (DirModifiedEvent or FileModifiedEvent) – Event representing file/directory modification.

on_moved(evento)
Se llama cuando se mueve o se cambia el nombre de un archivo o un directorio.

Parameters: event (DirMovedEvent or FileMovedEvent) – Event representing file/directory movement.

Sección de Reseñas y Valoraciones

Nos puedes añadir valor a nuestra información aportando tu experiencia en las explicaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *