花了一些時間將stdout和日誌輸出重定向到tkinter文本部件,我決定需要一些幫助。我的代碼如下:將Python記錄器的輸出重定向到tkinter部件
#!/usr/bin/env python
from Tkinter import *
import logging
from threading import Thread
class IODirector(object):
def __init__(self,text_area):
self.text_area = text_area
class StdoutDirector(IODirector):
def write(self,str):
self.text_area.insert(END,str)
def flush(self):
pass
class App(Frame):
def __init__(self, master):
self.master = master
Frame.__init__(self,master,relief=SUNKEN,bd=2)
self.start()
def start(self):
self.master.title("Test")
self.submit = Button(self.master, text='Run', command=self.do_run, fg="red")
self.submit.grid(row=1, column=2)
self.text_area = Text(self.master,height=2.5,width=30,bg='light cyan')
self.text_area.grid(row=1,column=1)
def do_run(self):
t = Thread(target=print_stuff)
sys.stdout = StdoutDirector(self.text_area)
t.start()
def print_stuff():
logger = logging.getLogger('print_stuff')
logger.info('This will not show')
print 'This will show'
print_some_other_stuff()
def print_some_other_stuff():
logger = logging.getLogger('print_some_other_stuff')
logger.info('This will also not show')
print 'This will also show'
def main():
logger = logging.getLogger('main')
root = Tk()
app = App(root)
root.mainloop()
if __name__=='__main__':
main()
我知道,一個可以定義基於文本構件一個新的日誌處理程序,但我不能讓它工作。函數「print_stuff」實際上只是許多不同功能的包裝,它們都有自己的記錄器設置。我需要幫助定義一個新的「全局」日誌記錄處理程序,以便它可以從具有其自己的記錄器的每個函數實例化。任何幫助深表感謝。
感謝您的回覆,但我已經有方法在我的代碼中重定向標準輸出。問題在於,即使您專門將stdout作爲處理程序添加到記錄器,Python記錄器也不會寫入stdout。當您重定向標準輸出時,至少來自記錄器的消息不包括在內。 – user2073502 2013-02-15 08:57:11