2014-10-09 71 views
2

有憐憫,我是初學者。Python,Tkinter,Subprocess-獲取標準輸出並將其插入到文本

我正在嘗試編寫一個非常基本的應用程序來運行'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腳本(這是對我的目的) - 「蟒蛇chkdsk.pyw」並啓動CHKDSK,它開始工作,然後不久就變得沒有響應。

我認爲這個問題與緩衝有關嗎?

+0

[請參閱此評論中的鏈接](http://stackoverflow.com/questions/22627148/tkinter-subprocess-locking-gui-and-not-returning-stdout-to-text#comment34460372_22627148) – jfs 2014-10-09 22:55:23

+0

@JFSebastian謝謝,我可以輕鬆地更改一行來完成這項工作。但我無法理解它的90%。 – Netanel 2014-10-10 16:51:48

+0

如果您有關於代碼的具體問題; [問](http://stackoverflow.com/questions/ask) – jfs 2014-10-10 20:03:16

回答

0

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

相關問題