現在のディレクトリにPythonファイルのリストを作成し、それぞれのボタンを生成するTkpythonプログラムがあります。ボタンをクリックすると、対応するPythonプログラムが新しいgnome-terminalのサブプロセスを介して起動されます。新しい端末でのサブプロセスの実行が終了したら、ボタンの色を赤に切り替えたいのですが。残念ながら、ボタンの色はすぐに変わります。
from Tkinter import *
import os, subprocess
root = Tk()
buttonsD = {}
def launch(ourfile):
p=subprocess.Popen(["gnome-terminal","-e","python " + ourfile], shell=False)
buttonsD[ourfile].configure(bg='red')
dirlist=os.listdir(os.getcwd())
for fname in dirlist:
if fname.endswith('py') and fname != 'gui2.py':
buttonsD[fname] = Button(root,text=fname,command=lambda i=fname: launch(i))
buttonsD[fname].pack(side=TOP,expand=YES,fill=BOTH)
root.mainloop()
ほとんどすぐに、p.poll == Noneの間待つことができ、gnome-terminalが作成されるまで少し時間がかかることがわかります。ただし、新しいターミナルでプロセスがまだ実行されている場合でも、ターミナルが作成されるとすぐにボタンが赤になります。新しいgnome-terminalを作成してから、実行したいプロセスを通信することもできません。gnome-terminalはbashの新しいインスタンスを作成し、doneを返すだけのようです。そのため、stdinと通信しようとすると、パイプエラーが発生します。