У меня есть некоторые основные вопросы о pyinotify, которые я не могу найти ответы в другом месте.
1) Для непрерывного монитора каталогов (и процессора событий) необходимо иметь какое-то время (True) или цикл непрерывного события, обработанный часами уведомления, и заканчивается, когда я удаляю часы?
2) Что произойдет, если файлы уже существуют, когда экземпляр inotify "включен"? Первоначально я просто хочу отслеживать IN_CREATE, но это не будет обрабатывать уже существующие файлы.
3) Как и в случае С# 2, что произойдет, если файл будет создан, пока я нахожусь в функции процессора событий? Будет ли pyinotify кэшировать его в своей очереди и обработать его, когда "цикл" начнется снова, или я проиграю это событие?
Вам понадобится while-loop
, но он может быть установлен неявно, вызвав метод notifier.loop
:
wm = pyinotify.WatchManager()
mask = pyinotify.IN_CREATE
notifier = pyinotify.Notifier(wm, MyProcessEvent(path))
wdd = wm.add_watch(path, mask, rec=True, auto_add=True)
notifier.loop()
Если вы хотите настроить while-loop
, вы можете начать с этого исходного кода с notifier.loop
:
while 1:
try:
notifier.process_events()
# check_events is blocking
if notifier.check_events():
notifier.read_events()
except KeyboardInterrupt:
# Stop monitoring if sigint is caught (Control-C).
break
notifier.stop()
Чтобы удалить часы определенного файла или каталога, вызовите wm.rm_watch
.
Что произойдет, если файлы уже существуют, когда экземпляр inotify включен?
Событие не генерируется до wm.add_watch
.
что произойдет, если файл будет создан, пока я нахожусь в функции процессора событий?
События помещаются в очередь в буфере размера /proc/sys/fs/inotify/max_queued_events
. Например, в моей системе это число
% cat /proc/sys/fs/inotify/max_queued_events
16384
Если файловая система генерирует достаточно событий для заполнения буфера во время обработки предыдущего события, вы получаете событие IN_Q_OVERFLOW
.
См. Комментарий в ответ blucz.