Обнаружение создания файла с помощью сторожевого таймера

Я пытаюсь обнаружить, когда файл с заданным именем создается в каталоге. Я делаю это благодаря watchdog. Создание правильно обнаружено, но я не знаю, как правильно завершить приложение после обнаружения.

Мой фрагмент кода выглядит следующим образом:

#!/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))

Я новичок в python, и я не могу понять, что не так. Обнаружение, по-видимому, запланировано в выделенном потоке, и метод join() ожидает завершения этого потока. Таким образом, я полагаю, что я не вызываю правильный метод на наблюдателе, чтобы остановить ожидание/цикл, но документация watchdog кажется действительно нечеткой, чтобы указать, какие методы могут быть использованы.

Есть ли у кого-то идея, как я могу достичь своей цели?

Ответы

Ответ 1

Наконец, взглянув на реализацию watchdog, нет необходимости вызывать unschedule_all до stop, это делается автоматически. Удаление строки, содержащей этот вызов метода, устраняет проблему, и приложение работает отлично.