navegar - operaciones con archivos python
Detectar la creación de archivos con watchdog. (1)
Finalmente, después de echar un vistazo a la implementación de watchdog, no es necesario llamar a unschedule_all
antes de stop
, esto se hace automáticamente. Al eliminar la línea que contiene esta llamada al método, se soluciona el problema y la aplicación se ejecuta perfectamente.
Estoy tratando de detectar cuando un archivo con un nombre dado se crea en un directorio. Lo estoy haciendo gracias al watchdog . La creación se detecta correctamente, pero no sé cómo terminar la aplicación correctamente una vez que se realiza la detección.
Mi pieza de código es la siguiente:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import sys
import time
from watchdog.events import FileSystemEventHandler
from watchdog.observers import Observer
logging.basicConfig(level=logging.ERROR)
class MyEventHandler(FileSystemEventHandler):
def __init__(self, observer, filename):
self.observer = observer
self.filename = filename
def on_created(self, event):
print "e=", event
if not event.is_directory and event.src_path.endswith(self.filename):
print "file created"
self.observer.unschedule_all()
self.observer.stop()
def main(argv=None):
path = argv[1]
filename = argv[2]
observer = Observer()
event_handler = MyEventHandler(observer, filename)
observer.schedule(event_handler, path, recursive=False)
observer.start()
observer.join()
return 0
if __name__ == "__main__":
sys.exit(main(sys.argv))
Soy nuevo en Python y no puedo entender qué está mal. La detección parece estar programada en un subproceso dedicado y el método join () está esperando a que termine este subproceso. Por lo tanto, supongo que no estoy llamando al método correcto en el observador para que deje de esperar / en bucle, pero la documentación del perro guardián parece no ser clara para señalar cuáles son los métodos que pueden usarse.
¿Alguien tiene una idea de cómo puedo lograr mi objetivo?