Поймать ошибки в 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

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

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

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

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


person elhoim    schedule 04.07.2016    source источник


Ответы (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()
person elhoim    schedule 04.07.2016