Моніторинг змін файлової системи
Щоб виконувати зміни, відповідно до подій файлової системи для Пайтона існує бібліотека Watchdog. Взагалі аналогів існує багато, а принцип роботи полягає в тому, що скрипт з певним інтервалом часу перевіряє всі файли у списку моніторингу, і якщо дата модифікації файлу змінилася, виконуються необхідні дії. Я також писав схожу штуку, код можна подивитися на гітхабі. Для Linux-систем існує трохи інший підхід, коли ядро операційної системи само сповіщує про зміни у файловій системі. Так відпадає необхідність постійно в циклі опитувати мільярд файлів. На основі цього побудована бібліотека pyinotify.
Отож, завдання полягає в тому, щоб скрипт повідомляв про редагування файлів певного типу (python-скрипти) в поточній папці. Створюємо новий клас обробника, де вказуємо необхідні патерни для файлів.
1 | class ScriptModifiedHandler(PatternMatchingEventHandler): |
Чотири методи: on_modified
, on_moved
, on_deleted
, on_created
дозволяють зробити окремий обробник для кожної події. Ми будемо просто виводити текст в консоль і лише на модифікацію файлу. Далі потрібно додати спостерігача, який буде використовувати даний обробник.
1 | observer = Observer() |
Створюємо екземпляр Спостерігача і Обробника і вказуємо для спостерігача папку, за якою наглядати (recursive=True
вказує, що за підпапками також треба слідкувати, path
- шлях до потрібної папки. Крапка відповідає директорії, з якої запущений скрипт). Повний код скрипта gist. Запустити так
1 | $ python watch.py |
Спробуйте відредагувати ще якийсь *.py-файл і отримайте нотифікацію про це в консоль. Зупинити виконання можна комбінаціює Ctrl
+C
.