我使用python2.7,Qt5.5和PyQt5实现了一个应用程序。我使用logging
使用Python-logger工作 - 模块:Log-Messages既发送到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
注意:的
纯Qt方式似乎在操纵QDebug
对象,但我无法在PyQt5中找到该类。
问题:
如何qDebug
写入文件stderr.txt
?
答案 0 :(得分:8)
您可以安装message handler:
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()
但请注意:
QT_MESSAGELOGCONTEXT
在发布版本中定义)qInfo()
当前未被PyQt