我有一个gui,它应该打开一个程序,并在按下退出按钮时退出程序。代码如下:
#!/usr/bin/python
import Tkinter as tk
import subprocess
import os
import signal
class StageGui:
def __init__(self,parent):
self.process = None
self.f = tk.Frame(main, width=300, height=300)
self.b1=tk.Button(main,text='Start Medina',command=self.startmedina).pack(side='left',anchor='nw')
self.b2=tk.Button(main,text='Quit Medina',command=self.quitmedina).pack(side='left',anchor='nw')
self.xf = tk.Frame(self.f,relief='groove', borderwidth=2)
def startmedina(self):
self.process=subprocess.Popen(['pre xx'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True,preexec_fn=os.setsid)
return
def quitmedina(self):
os.killpg(self.process.pid,signal.SIGKILL)
return
main = tk.Tk()
stagegui=StageGui(main)
main.title('prototype')
main.mainloop()
当我按下开始按钮时,程序会打开但按下退出时它不会杀死子进程。任何人都能帮我这个吗?
答案 0 :(得分:0)
使用StageGui.process.terminate()
来终止进程,而不是os.kill
。如果这不起作用,您可以尝试StageGui.process.kill()
,但这相当于发送SIGKILL
(假设您在POSIX系统上),这是一个非优雅的关闭进程的方法。
另外,您真的希望process
成为类属性,而不是实例属性吗?在self.process = None
中设置__init__
和在self.process = Popen(...
设置startmedina
可能更有意义。