Мне нужно создать 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)