Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python日志记录命令不能实时工作_Python_Logging_Tkinter - Fatal编程技术网

Python日志记录命令不能实时工作

Python日志记录命令不能实时工作,python,logging,tkinter,Python,Logging,Tkinter,我在Tkinter(ScrolledText)中有一个日志小部件,它有一个TextHandler类来处理小部件中的日志和打印主题 class TextHandler(logging.Handler): def __init__(self, text): # run the regular Handler __init__ logging.Handler.__init__(self) # Store a reference to the T

我在Tkinter(ScrolledText)中有一个日志小部件,它有一个
TextHandler
类来处理小部件中的日志和打印主题

class TextHandler(logging.Handler):

    def __init__(self, text):
        # run the regular Handler __init__
        logging.Handler.__init__(self)
        # Store a reference to the Text it will log to
        self.text = text

    def emit(self, record):
        msg = self.format(record)

        def append():
            self.text.configure(state='normal')
            self.text.insert(Tkinter.END, msg + '\n')
            self.text.configure(state='disabled')
            # Autoscroll to the bottom
            self.text.yview(Tkinter.END)

        self.text.after(0, append)


st = ScrolledText.ScrolledText(self, width=190, height=9, state='disabled')
st.configure(font='TkFixedFont')
st.place(x=0, y=539)

text_handler = TextHandler(st)

# Logging configuration
logging.basicConfig(filename='test.log',
                            level=logging.INFO,
                            format='%(asctime)s - %(levelname)s - %(message)s')

# Add the handler to logger
self.logger = logging.getLogger()

self.logger.addHandler(text_handler)
并调用
logging.info(msg)
获取日志消息。但有一个问题。一切都很好,但当在进程之前调用此函数时(例如,一些用于列表),我的日志会在之后出现

logging.info("message")
print "message"
for topic in news:
    ...
print
方法在这里工作正常,但是
日志记录存在问题。我在循环结束后有日志消息

所以有什么问题?

您不应该在(0,…)之后使用
。我不确定这是否是唯一的问题,但这肯定是一个问题。您正在耗尽事件处理程序——“空闲”队列将永远不会为空,因此它没有机会为正常事件提供服务。实际上,您已经创建了一个无限循环


您应该给出一个小的非零间隔,这将有助于解决这个问题

您不应该在(0,…)之后使用
。我不确定这是否是唯一的问题,但这肯定是一个问题。您正在耗尽事件处理程序——“空闲”队列将永远不会为空,因此它没有机会为正常事件提供服务。实际上,您已经创建了一个无限循环


您应该给出一个小的非零间隔,这将有助于解决这个问题

我不知道这是否是真正的原因,因为我在Python中没有遇到过,但在Java中,我发现在关闭文件之前,不会将内容写入文件。Python会在脚本停止后关闭所有内容,因此可能会在计时方面发生类似的事情。谢谢。正常情况下,一切正常。当log命令@davym之后有一个进程循环时,我就遇到了这个问题。你不必关闭文件,刷新就足够了。即file.flush()没有任何文件问题。。。这是另一个@R2RTYe,我的错误,但我仍然认为
flushing
是这里的关键词。您需要同步程序中的输入。我不知道这是否是真正的原因,因为我在Python中没有遇到过,但在Java中,我发现在关闭文件之前,不会将内容写入文件。Python会在脚本停止后关闭所有内容,因此可能会在计时方面发生类似的事情。谢谢。正常情况下,一切正常。当log命令@davym之后有一个进程循环时,我就遇到了这个问题。你不必关闭文件,刷新就足够了。即file.flush()没有任何文件问题。。。这是另一个@R2RTYe,我的错误,但我仍然认为
flushing
是这里的关键词。您需要同步程序中的输入。