怜悯,我是一个初学者。
我正在尝试编写一个非常基本的应用程序来运行“ 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
正在阻止。使用非阻塞read
和after
方法。
关于python - Python,Tkinter,子流程-获取标准输出并将其插入到文本中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26288050/