python - 如何在pyside2中记录c ++中引发的qt异常
问题描述
我有一个 QT5/Pyside2 应用程序愉快地登录到一个文件。异常也通过异常钩子记录:
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 处理它?
解决方案
过去我在使用 PyQt 时遇到过完全相同的问题,所以我编写了一个简单的模块,允许为 stdout 和 stderr 设置输出文件。该模块称为pyfreopen但必须编译。
不幸的是,我很久以前就使用 Python 2.7 完成了它,因此它可能无法在 Python 3 上运行(我稍后会在家并检查它是否也可以为 Python 3 构建)。
用法很简单:
freopen.set_stdout(path="stderr.log")
freopen.set_stderr(path="stdout.log")
请注意,如自述文件中所述,一旦设置了输出,就无法恢复为默认行为。
推荐阅读
- python - 访问作为 Python 中另一个对象中的数组的对象的属性
- javascript - jQuery - 在垂直鼠标滚动时水平移动元素 - 滚动方法不适用于自定义变量
- javascript - 如何将样式默认应用到我的组件
- oracle - 输出差异
- javascript - 取消订阅 RxJS 后有没有办法重新订阅?
- python - 从 MongoDB 到 Pandas 数据框
- java - 从 jenkins groovy 更新应用程序 .properties 文件
- php - 有没有办法将数组数组转换为 JSON?
- android - Android 不支持值为 false 的 clipToBounds。您可以使用 this.android.getParent().setClipChildren(false) 作为替代
- typescript - Jest 无法运行 .tsx 文件(CRA 2,酶)