私の質問はこれとほとんど同じです: サブプロセスstdoutを表示するウィジェット? しかし、さらに一歩。
私は次のコード(python2.7)を持っています:
def btnGoClick(p1):
params = w.line.get()
if len(params) == 0:
return
# create child window
win = tk.Toplevel()
win.title('Bash')
win.resizable(0, 0)
# create a frame to be able to attach the scrollbar
frame = ttk.Frame(win)
# the Text widget - the size of the widget define the size of the window
t = tk.Text(frame, width=80, bg="black", fg="green")
t.pack(side="left", fill="both")
s = ttk.Scrollbar(frame)
s.pack(side="right", fill="y")
# link the text and scrollbar widgets
s.config(command=t.yview)
t.config(yscrollcommand=s.set)
frame.pack()
process = subprocess.Popen(["<bashscript>", params], shell=False,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while True:
out = process.stdout.readline()
if out == '' and process.poll() is not None:
break
print out
t.insert(tk.END, out)
「長時間実行中の」bashスクリプトからの出力はリアルタイムでキャプチャされます(コンソールに表示されます)が、Tkinterウィンドウはサブプロセスの終了後にのみ表示されます!!
サブプロセスが開始する前にウィンドウを表示し、そのコンテンツをリアルタイムで更新するにはどうすればよいですか?