вопросы по реализации экземпляра pyinotify для мониторинга каталога

1

У меня есть некоторые основные вопросы о pyinotify, которые я не могу найти ответы в другом месте.

1) Для непрерывного монитора каталогов (и процессора событий) необходимо иметь какое-то время (True) или цикл непрерывного события, обработанный часами уведомления, и заканчивается, когда я удаляю часы?

2) Что произойдет, если файлы уже существуют, когда экземпляр inotify "включен"? Первоначально я просто хочу отслеживать IN_CREATE, но это не будет обрабатывать уже существующие файлы.

3) Как и в случае С# 2, что произойдет, если файл будет создан, пока я нахожусь в функции процессора событий? Будет ли pyinotify кэшировать его в своей очереди и обработать его, когда "цикл" начнется снова, или я проиграю это событие?

Теги:
loops
events
inotify

1 ответ

2
Лучший ответ
  • необходимо иметь промежуток времени (True)

Вам понадобится 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.

  • 0
    поэтому единственный раз, когда мне нужно учитывать файлы, которые pyinotify не может найти, - это когда программа запускается и в каталоге (потенциально) уже есть файлы. Мне понадобится функция итератора каталога, чтобы обрабатывать их вручную, а затем ввести в экземпляр pyinotify ....
  • 1
    Подробные ответы, отлично!
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню