Как продолжить выполнение скрипта при появлении определённого файла в каталоге? 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 шт):
Передал 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
В чем может быть тут проблема - почему-то отслеживается не файл, а путь к нему, крайняя директория, так что вообще без понятия, как отследить переименование.