我使用 python2.7、Qt5.5 和 PyQt5 实现了一个应用程序。我使用Python记录器工作logging
-模块:日志消息都发送到 stderr 和日志文件。
但是,Qt 日志消息仅出现在 stderr 中,我找不到将它们重定向到文件的方法。
为了缩小问题范围,我尝试了以下方法:
>>> from PyQt5.QtCore import qDebug
>>> import sys
>>> sys.stderr = open("stderr.txt", 'w')
>>> qDebug('test message')
test message
>>> sys.stderr.close()
>>> # stderr.txt is empty
Note:纯 Qt 方式似乎正在操纵QDebug
对象,但我无法在 PyQt5 中找到该类。
问题:我怎样才能拥有qDebug
写入文件stderr.txt
?
您可以安装一个消息处理程序 http://doc.qt.io/qt-5/qtglobal.html#qInstallMessageHandler:
import sys
from PyQt5 import QtCore, QtWidgets
def qt_message_handler(mode, context, message):
if mode == QtCore.QtInfoMsg:
mode = 'INFO'
elif mode == QtCore.QtWarningMsg:
mode = 'WARNING'
elif mode == QtCore.QtCriticalMsg:
mode = 'CRITICAL'
elif mode == QtCore.QtFatalMsg:
mode = 'FATAL'
else:
mode = 'DEBUG'
print('qt_message_handler: line: %d, func: %s(), file: %s' % (
context.line, context.function, context.file))
print(' %s: %s\n' % (mode, message))
QtCore.qInstallMessageHandler(qt_message_handler)
app = QtWidgets.QApplication(sys.argv)
def main():
QtCore.qDebug('something informative')
win = QtWidgets.QMainWindow()
# trigger a Qt debug message
win.setLayout(QtWidgets.QVBoxLayout())
main()
但请注意:
- python 代码的上下文属性始终存在,但对于
来自 Qt 的消息,您将需要一个调试版本(或者有
QT_MESSAGELOGCONTEXT
在发布版本中定义)
- 因为某些原因,
qInfo()
目前尚未被 PyQt 封装
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)