Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 将另一个程序的日志重定向到我的Tkinter程序_Python_Multithreading_Python 2.7_Logging_Tkinter - Fatal编程技术网

Python 将另一个程序的日志重定向到我的Tkinter程序

Python 将另一个程序的日志重定向到我的Tkinter程序,python,multithreading,python-2.7,logging,tkinter,Python,Multithreading,Python 2.7,Logging,Tkinter,我的目标是向Tkinter GUI显示另一个程序的日志(它的代码不是我的)。在GUI接受输入后,我已经使用subprocess运行了另一个程序,但其输出显示在命令提示符中 如何从另一个程序(在另一个文件夹中)访问getLogger并将其重定向到我的文本小部件?任何线索或提示,我要澄清将是一个很大的帮助 这是其中的一些片段。ResultsInterface是一个来自gui的顶级窗口,接受输入,并在按下主gui的Run按钮后调用。我计划调用子进程(['python','program.py']+in

我的目标是向Tkinter GUI显示另一个程序的日志(它的代码不是我的)。在GUI接受输入后,我已经使用subprocess运行了另一个程序,但其输出显示在命令提示符中

如何从另一个程序(在另一个文件夹中)访问getLogger并将其重定向到我的文本小部件?任何线索或提示,我要澄清将是一个很大的帮助

这是其中的一些片段。ResultsInterface是一个来自gui的顶级窗口,接受输入,并在按下主gui的Run按钮后调用。我计划调用子进程(['python','program.py']+input)并在文本小部件上显示它

class IODirector(object):
    def __init__(self, text_area):
        self.text_area = text_area

class StdoutDirector(IODirector):
    def write(self, msg):
        self.text_area.insert(END, msg)
    def flush(self):
        pass

class ResultsInterface():
  def __init__(self, master, word = ""):
    self.master = master
    self.word = word
    self.frame = Frame(self.master)
    self.master.title("Results")
    self.text_area = Text(master, borderwidth = 3, width = 80, height = 20, font = "Consolas 11", relief="sunken")
    self.text_area.grid(row = 4, ipadx = 5, ipady = 5, padx = 10, pady = 10, sticky ="we")
    self.do_run
    self.frame.grid()

  def do_run(self):
    t = Thread(target=run_thug)
    sys.stdout = StdoutDirector(self.text_area)
    # configure the nameless "root" logger to also write         
    # to the redirected sys.stdout
    #Just saw this snippet in other's answer, how do I show logs only to the Text text_area widget                         
    logger = logging.getLogger("Program")                                   
    console = logging.StreamHandler(stream=sys.stdout)             
    logger.addHandler(console)
    #t.start() #want it to run with the log appearing on my text_area

  def run_thug(self): 
    input_args = "/path/to/program.py" + " " + self.word
    cmdr = ['python']+(input_args.split(' '))
    self.process = Popen((cmdr), stdout=PIPE)