현재 디렉토리에 파이썬 파일 목록을 작성하고 각각에 대한 단추를 생성하는 Tk 파이썬 프로그램이 있습니다. 버튼을 클릭하면 해당 파이썬 프로그램이 새로운 그놈 터미널의 하위 프로세스를 통해 시작됩니다. 하위 프로세스가 새 터미널에서 실행을 마친 후에 버튼의 색상을 빨간색으로 전환하고 싶습니다. 불행히도 버튼이 거의 즉시 색상을 변경합니다.서브 프로세스가 완료된 후 색을 지정하십시오.
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()
거의 동시에 I가 p.poll == 없음 동안 기다린가 그놈 터미널 생성되어야하는 순간 걸리는 것을 알 수 있다는 것을 의미한다. 그러나 터미널이 생성되는 즉시 새 터미널에서 프로세스가 실행 중이더라도 버튼이 빨간색으로 변합니다. 나는 새로운 그놈 터미널을 생성 할 수 없으며 실행하고자하는 프로세스를 알릴 수 없다. gnome-terminal은 bash의 새로운 인스턴스를 생성 한 다음 완료된 것으로 반환하므로 표준 입력란과 통신하려고하면 파이프 오류가 발생합니다.