我正在开发一个应用程序,当您按下GUI上的“开始”按钮时,该应用程序将运行一批测试。问题是,一旦调用运行测试的子进程,Python GUI就会冻结,直到子进程完成执行。我顺便使用Python 2.7。
我想在测试运行时与GUI交互,可以按下不同的按钮等,而不会中断测试。
以下是我对此部分的摘录:
import Tkinter
import tkMessageBox
import subprocess
top = Tkinter.Tk()
def batchStartCallBack():
tkMessageBox.showinfo("Batch Application", "Batch STARTED!")
for x in range(0, 3):
p = subprocess.call('batch path', stdout = None, stderr = None, shell=False)
def batchStopCallBack():
tkMessageBox.showinfo("Batch Application", "Batch Stopped!")
# STOP BATCH
StartButton = Tkinter.Button(top, text = "Start Batch", command = batchStartCallBack, width = 8, height = 2)
StopButton = Tkinter.Button(top, text = "Stop Batch", command = batchStopCallBack, width = 8, height = 2)
StartButton.pack()
StopButton.pack()
top.mainloop()
答案 0 :(得分:1)
您应该使用subprocess.Popen
,non-blocking。调用subprocess.call
将使当前脚本等待,直到子进程完成。在gui中,运行无限循环检查输入,这意味着你的gui将无法响应,如你所见。可以初始化子进程池并为gui使用单独的子进程,为运行使用另一个子进程...