在 Python 3.5.2 和 PyQt5 中获取 QMessageBox stderr 消息

Getting QMessageBox stderr messages back in Python 3.5.2 & PyQt5

我有一个 Windows 应用程序,最初是用 Python 3.4 使用 PyQt4 编写的,它通过信号和槽将 stderr 重定向到对话框。 This posting 描述了我是如何让它工作的(见最后的最终代码)。它工作得很好,捕获了您通常会在控制台上看到的所有详细的 stderr 消息。这是一个典型的屏幕截图:

当我安装 Python 3.5.2、PyQt5 并升级我的几个软件包时,它不再有效。现在,当我遇到错误时,我的整个应用程序会立即关闭,而且我无法追踪错误。

但是,当我在 pydev 调试器中 运行 我的应用程序时,我漂亮的窗口化 stderr 消息又回来了。我将调试器设置为在出现所有错误时中断,它确实如此,这允许我的窗口 stderr 文本出现。

还有另一种方法可以恢复窗口错误消息:将我的一个核心包 (lmfit) 从最近的 0.9.5 恢复到我使用的较早的 0.9.3。

任何人都可以建议可能会发生什么吗?我问过 lmfit 开发人员他们可能改变了什么,并尝试了十几种不同的替代方案,但没有成功。

过滤 stderr 消息有点老套。使用 excepthook to centralise the processing of unhandled exceptions. The traceback 模块可用于以各种方式格式化异常。

如果您还想处理 Qt 消息,请使用 qInstallMessageHandler. To format these messages, you can use qFormatLogMessage and qSetMessagePattern。所有这些功能都在 QtCore 模块中。