怜悯,我是一个初学者。

我正在尝试编写一个非常基本的应用程序来运行“ chkdsk c:”并将输出逐行打印到文本框。对于每一行,我都希望ttk.Progressbar移动一点。我看到这里回答了类似的问题,但无法解决。我到这为止了:

from Tkinter import *
import ttk
from subprocess import Popen, PIPE

gui = Tk()

text = Text(gui)
lb = ttk.Label(text="Chkdsk")
prog = ttk.Progressbar(mode='indeterminate')

def chkdsk():
    proc = Popen(['chkdsk','c:'],stdout=PIPE)
    while True:
        line = proc.stdout.readline()
        if line != '':
            text.insert(INSERT, "\n")
            text.insert(END, line.rstrip())
            prog.step(1)
            gui.update()
        else:
            break

bt = ttk.Button(text="Chkdsk", command=chkdsk).grid(row=4, column=5)

text.grid(row=6, column= 5)
lb.grid(row=3, column=5)
prog.grid(row=7,column=5)
mainloop()


好的,因此,当我在提升权限的命令提示符下运行此.pyw脚本时(这对我而言是有好处的)-“ python chkdsk.pyw”并启动chkdsk,它开始工作,然后不久就变得无响应。

我相信问题与缓冲有关吗?

最佳答案

readline正在阻止。使用非阻塞readafter方法。

关于python - Python,Tkinter,子流程-获取标准输出并将其插入到文本中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26288050/

10-12 18:41