Обнаружение изменения файла без опроса [дубликат]


этот вопрос уже есть ответ здесь:

  • Как просмотреть файл на предмет изменений? 20 ответов

Я пытаюсь использовать метод в программе Python, чтобы определить, был ли изменен файл в файловой системе. Я знаю, что я мог бы что-то запустить каждые 5 секунд, чтобы проверить дату последней модификации системы, но мне было любопытно, есть ли более простой способ сделать это, не требуя, чтобы моя программа проверяла повторно.

кто-нибудь знает о таком методе?

4 61

4 ответа:

для linux, есть pyinotify.

на главной странице:

Pyinotify-это модуль Python для мониторинг изменений файловых систем. Pyinotify опирается на ядро Linux функция (объединена в ядре 2.6.13) позвонил через inotify. inotify-это управляемый событиями уведомитель, его уведомления экспортируются из ядра пространство для пользователя пространство через три системный вызов. pyinotify связывает эти системные вызовы и предоставляет выполнение на верхней части им предлагают общий и абстрактный способ управлять этими функциями.

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

сторож

отличная кроссплатформенная библиотека для просмотра каталогов.

с сайта

Поддерживаемые Платформы

  • Linux 2.6 (inotify)

  • Mac OS X (FSEvents, kqueue)

  • FreeBSD/BSD (kqueue)

  • Windows (ReadDirectoryChangesW с портами завершения ввода-вывода; ReadDirectoryChangesW рабочие потоки)

  • OS-independent (опрос диска для моментальных снимков каталога и их периодическое сравнение; медленно и не рекомендуется)

Я использовал его на пару проектов, и это, кажется, работает замечательно.

на windows есть:

наблюдатель, который является хорошим питона порта .Чистый API-интерфейс класса filesystemwatcher.

также есть (тот, который я написал) dirwatch.

оба полагаются на windows ReadDirectoryChangesW

вы также должны увидеть inotifyx который очень похож на ранее упомянутый pyinotify, но, как говорят, имеет API, который меняется меньше.