我有一个pythongui应用程序,它使用子流程.Popen打电话。在我的GUI中有一个Tkinter文本框,我想在其中显示子进程的输出。在OSX上,这是完美的,但在Windows7上,直到子进程运行完毕,输出才会显示在文本框中。如何让输出在Windows上实时打印?在
启动子进程的代码:
p = Popen(command, stdout=PIPE, stderr=STDOUT, bufsize=1, close_fds=ON_POSIX)
t = Thread(target=read_and_print, args=(p, log_output))
t.daemon = True
t.start()
函数将输出打印到文本框。这是在一个单独的线程中运行的,这样GUI就不会在子进程执行时挂起。在
^{pr2}$
问题是,在Windows上运行的Python将STDERR保存在一个缓冲区中,直到命令运行完毕(!?)。在
解决方案是告诉Python在不使用
-u
标志缓冲其输出的情况下运行。这使得我传递给subprocess.Popen
的命令而不是
^{pr2}$相关问题 更多 >
编程相关推荐