正如标题中所写,我需要以尽可能简单的方式将日志记录模块输出重定向到 Kivy 标签。我在网上搜索了一个解决方案,我认为最好的方法是以某种方式覆盖 StreamHandler 或 MemoryHandler(但我不知道如何做到这一点)。
有人可以帮助我实现这一目标吗?
我使用 python 2.7
谢谢
最佳答案
我总是为这样的情况制作自己的 logging.Handler 。
这是一个 工作 示例:
主要.py:
import kivy
from kivy.app import App
from kivy.clock import Clock
from kivy.uix.label import Label
import logging
import thread
import time
def my_thread(log):
for i in range(2**20):
time.sleep(1)
log.info("WOO %s", i)
class MyLabelHandler(logging.Handler):
def __init__(self, label, level=logging.NOTSET):
logging.Handler.__init__(self, level=level)
self.label = label
def emit(self, record):
"using the Clock module for thread safety with kivy's main loop"
def f(dt=None):
self.label.text = self.format(record) #"use += to append..."
Clock.schedule_once(f)
class MyApp(App):
def build(self):
label = Label(text="showing the log here")
log = logging.getLogger("my.logger")
log.level = logging.DEBUG
log.addHandler(MyLabelHandler(label, logging.DEBUG))
thread.start_new(my_thread, (log,))
return label
if __name__ == '__main__':
MyApp().run()
注意这里的简单线程来测试日志记录。
关于python - 如何将 Python 日志输出重定向到 Kivy 标签?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34539563/