Как продолжить выполнение скрипта при появлении определённого файла в каталоге? Python

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

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

class Handler(FileSystemEventHandler):
    def on_created(self, event):
        if 'total' in event.src_path:
            return # Универсальная команда

observer = Observer()
observer.schedule(Handler(), Dir_path, recursive=True)
observer.start()
try:
    while True:
        time.sleep(0.1)
except: # Какая-то универсальная команда для остановки цикла, переданная из функции класса
    observer.stop()
    observer.join()

# Дальнейшие действия 

Пока не силён в классах и не особо понял методы работы модуля watchdog, поэтому буду благодарен за советы по реализации моей задачи (необязательно используя этот модуль).


Ответы (1 шт):

Автор решения: handowl

Передал observer, чтобы остановить его. Да, можно потом еще обработать try, чтобы не вылезали всякие KeyboardInterrupt, но и так вроде работает.

Что может не работать здесь? Смотри, когда ты создаешь файл руками, то создается файл с именем "новый файл" (по крайней мере на линуксе так, у тебя может сработает), а только потом он переименовывается в "name.total", поэтому нужно обрабатывать изменение в имени.

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import os
import time

Dir_path = os.getcwd()

class Handler(FileSystemEventHandler):
    def __init__(self, parent):
        self.parent = parent
        
    def on_created(self, event):
        if event.src_path.endswith('.total'):
            self.parent.stop()

observer = Observer()
observer.schedule(Handler(observer), Dir_path, recursive=True)
observer.start()
while observer.should_keep_running():
    time.sleep(.1)

Нужно дописать в Handler метод

def on_modify(self, event):
    pass

В чем может быть тут проблема - почему-то отслеживается не файл, а путь к нему, крайняя директория, так что вообще без понятия, как отследить переименование.

→ Ссылка