Python脚本在进程完成之前无法读取Popen输出(在Windows上)

2024-04-20 08:31:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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}$

Tags: 代码应用程序进程tkinterwindowsstdoutgui流程
1条回答
网友
1楼 · 发布于 2024-04-20 08:31:55

问题是,在Windows上运行的Python将STDERR保存在一个缓冲区中,直到命令运行完毕(!?)。在

解决方案是告诉Python在不使用-u标志缓冲其输出的情况下运行。这使得我传递给subprocess.Popen的命令

["python", "-u", "myprogram.py"]

而不是

^{pr2}$

相关问题 更多 >