@Emince

Как мониторить изменение файла?

Вот, собственно, код, file.txt в каталоге со скриптом.

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

class MyHandler(FileSystemEventHandler):
    def on_modified(self, event):
        if event.src_path == 'file.txt':
            print("Файл file.txt был изменен!")

if __name__ == "__main__":
    event_handler = MyHandler()
    observer = Observer()
    observer.schedule(event_handler, path='file.txt', recursive=False)
    observer.start()

    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()


Слепил подобное для каталога - работает, для файла - не могу понять, как сделать правильно.
  • Вопрос задан
  • 160 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Читаем документацию:
schedule(event_handler, path, recursive=False)
Schedules watching a path and calls appropriate methods specified in the given event handler in response to file system events.
Parameters:
event_handler (watchdog.events.FileSystemEventHandler or a subclass) – An event handler instance that has appropriate event handling methods which will be called by the observer in response to file system events.
path (str) – Directory path that will be monitored.
recursive (bool) – True if events will be emitted for sub-directories traversed recursively; False otherwise.

Returns:
An ObservedWatch object instance representing a watch.

Прямо говорится что должен быть путь к каталогу.
Просто проверяй каталог файла, указав recursive=False, а в обработчике фильтруй по имени. Только имей ввиду, что имя может иметь другой вид. Например, если я мониторю "." (текущий каталог), то имя мне приходит вида ".\test.txt". Так что pathlib в помощь, чтобы вытащть из имени нужную часть.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 22:03
3000 руб./за проект
23 нояб. 2024, в 21:53
30000 руб./за проект
23 нояб. 2024, в 21:49
1000 руб./в час