gpt4 book ai didi

python - 使用 PyQt5 将 qDebug 输出重定向到文件

转载 作者:太空狗 更新时间:2023-10-29 22:21:39 24 4
gpt4 key购买 nike

我使用 python2.7、Qt5.5 和 PyQt5 实现了一个应用程序。我让 Python 记录器使用 logging-Module: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

最佳答案

您可以安装 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()

但注意:

  • context 属性将始终存在于 python 代码中,但对于来自 Qt 的消息,您将需要一个调试版本(或QT_MESSAGELOGCONTEXT 在发布版本中定义)
  • 出于某种原因,qInfo() 当前未被 PyQt 包装

关于python - 使用 PyQt5 将 qDebug 输出重定向到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35894171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com