как регистрировать исключения qt, поднятые в c ++, в pyside2 - PullRequest
0 голосов
/ 14 июля 2020

У меня есть приложение QT5 / Pyside2, которое успешно входит в файл. Также исключения регистрируются через excepthook:

sys.excepthook = lambda t, value, tb: log.exception(f'{t} {value} {"".join(traceback.format_exception(t, value, tb))}')

Но некоторые исключения, вызванные QT, похоже, не передают обработчик. Они просто выводятся на консоль.

2020-07-14 13:42:51,676 - TRACE - sidewindow::__init__() - new view. call super.
2020-07-14 13:42:51,681 - TRACE - sidewindow::__init__() - show window and append
QWindowsEGLStaticContext::createWindowSurface: Could not create the EGL window surface: 0x3003
qt.qpa.backingstore: composeAndFlush: makeCurrent() failed
createDIB: CreateDIBSection failed (1273x666, format: 6)

Как я могу перенаправить эти исключения в файл или заставить python обработать их?

1 Ответ

0 голосов
/ 14 июля 2020

Раньше у меня была точно такая же проблема с PyQt, поэтому я написал простой модуль, который позволяет устанавливать выходные файлы как для stdout, так и для stderr. Модуль называется pyfreopen , но должен быть скомпилирован.

К сожалению, я делал это много раз go, используя Python 2.7, так что возможно, он не сработает. на Python 3 (я буду дома позже и проверю, можно ли его построить и для Python 3).

Использование очень простое:

freopen.set_stdout(path="stderr.log")
freopen.set_stderr(path="stdout.log")

Обратите внимание, что, как объясняется в файле readme, после настройки вывода его нельзя восстановить до поведения по умолчанию.

...