当前位置:  开发笔记 > 编程语言 > 正文

如何将Python的日志输出重定向到Kivy标签?

如何解决《如何将Python的日志输出重定向到Kivy标签?》经验,为你挑选了1个好方法。

如标题中所述,我需要以尽可能简单的方式将日志记录模块的输出重定向到Kivy标签。我在网上搜索了一个解决方案,我认为最好的方法是覆盖StreamHandlerMemoryHandler某种方式(但是我不知道如何做到这一点)。

有人可以帮助我实现这一目标吗?

我使用python 2.7

谢谢



1> Yoav Glazner..:

对于这些情况,我总是自己编写logging.Handler。

这是一个工作示例:

main.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()

注意这里的简单线程来测试日志记录。

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有