Поймать ошибки в pyinotify ProcessEvent

У меня проблемы с отловом ошибок внутри обработчика событий из pyinotify. Я пытаюсь выполнить обработку файлов, которые были только что закрыты после записи в.

Вот упрощенная версия моего скрипта:

import pyinotify
import asyncore

mask = pyinotify.IN_CLOSE_WRITE

class EventHandler(pyinotify.ProcessEvent):

    def process_IN_CLOSE_WRITE(self, event):
        try:
            do_stuff()
        except BaseException as e:
            print "Exception:" + str(e)
            pass

if __name__ == "__main__":
        try:
                wm = pyinotify.WatchManager()

                notifier = pyinotify.AsyncNotifier(wm, EventHandler())
                wdd = wm.add_watch('/dir-to-watch/', mask, rec=True)
                asyncore.loop()
        except:
                print "Unhandled error!"
                print "Details:" + str(e)
                print "Continuing anyway..."
                pass

Кажется, что когда я получаю ошибку или исключение, ни мои, кроме основного цикла, ни мои, кроме BaseException в обработчике событий, не перехватывают ошибку или исключения.

Я получаю сообщения, начинающиеся так:

ошибка: исключение незафиксированного Python, закрытие канала (:[Errno 2] Нет такого файла или каталога:

Итак, мой вопрос: как можно поймать эти исключения?

1 ответ

Мне пришлось создать пользовательский AsyncNotifier:

class CustomAsyncNotifier(pyinotify.AsyncNotifier):
        def handle_error(self):
                print "Handling error!"
                print "Guru meditiation #00000025.65045338"
                print ""
                print "Continuing anyway..."

а затем измените мой код, чтобы использовать его:

if __name__ == "__main__":
        wm = pyinotify.WatchManager()

        notifier = CustomAsyncNotifier(wm, EventHandler())
        wdd = wm.add_watch('/mnt/md0/proxies/', mask, rec=True)
        asyncore.loop()
Другие вопросы по тегам