Watchdog - создавать события для существующих файлов при запуске

Мне нужно создать FileCreatedEvents для файлов, которые существуют в каталоге при запуске моего сторожевого приложения. Я просмотрел несколько вещей в Интернете, чтобы попытаться выполнить их, но ни одна из них не будет работать с моим текущим подходом:

Python Watchdog обрабатывает существующие файлы при запуске https://www.reddit.com/r/learnpython/comments/fz57og/watchdog_how_to_include_existing_files/fn34dgk/

Кажется, что первый подход будет работать, но я не использую очередь. У меня есть пары файлов, и я не могу работать с этими файлами, пока пара не будет получена. Поэтому я добавляю файлы в список по мере их поступления, а затем проверяю пару и, если она существует, я делаю что-то.

Вот моя версия подхода:

class Watcher():

    observer = None
    directory = None
    pattern = None

def __init__(self, directory, pattern):
    
    self.observer = Observer()
    self.directory = directory
    self.pattern = pattern

def run(self):
    event_handler = Handler(self.pattern)
    self.observer.daemon=True
    self.observer.schedule(event_handler, path=self.directory, recursive=False)      
    
    self.observer.start() 
    log.info("Watcher started...")

    log.info("Checking for existing files...")
    for file in os.listdir(self.directory):
        filename = os.path.join(self.directory, file)
        if os.path.isfile(filename) and "hash" not in filename:
            event = FileCreatedEvent(filename)
            event.event_type = "created"
            print(event) 
#prints: <FileCreatedEvent: event_type=created, src_path='my_file.txt', is_directory=False>
            self.observer.event_queue.put((event, self.observer))
            

    try:
        while True:
            time.sleep(2)
    except KeyboardInterrupt:
        self.observer.stop()
        log.info("Watcher stopped")
    observer.join()

Я попытался реализовать это в своем коде, и все работает до этой строки:

self.observer.event_queue.put((event, self.observer))

Я также пробовал это:

event_handler.dispatch(event)

ОБНОВЛЕНИЕ:

Кажется, это создает событие, но тогда я не знаю, как на самом деле вызвать или запустить событие. Заранее благодарю за любую помощь

Для тех, кто ищет это, у меня был несвязанный блок кода, который мешал работать одному из методов, которые я пробовал. Вот что в итоге стало решением:

event_handler.on_created(event)


person hyphen    schedule 08.03.2021    source источник