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