我有一个小的GUI可以启动程序(预安装的应用程序)作为线程中的子进程,但现在我希望程序在GUI中按下按钮时作为服务运行。
我可以守护子进程吗?如果不可能,我该怎么做?
GUI的代码如下:
#!/usr/bin/python
import Tkinter as tk
import subprocess
import os
import signal
import threading
class StageGui:
process=0
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=startmedina).pack(side='left',anchor='nw')
self.b2=tk.Button(main,text='Quit Medina',command=quitmedina).pack(side='left',anchor='nw')
self.xf = tk.Frame(self.f,relief='groove', borderwidth=2)
class myThread (threading.Thread):
def __init__(self, threadID, name, counter):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.counter = counter
def run(self):
StageGui.process=subprocess.Popen(['pre xx'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True,preexec_fn=os.setsid)
return
def startmedina():
thread1 = StageGui.myThread(1, "Thread-1", 1)
thread1.start()
print "Exiting Main Thread"
return
main = tk.Tk()
stagegui=StageGui(main)
main.title('prototype')
main.mainloop()
答案 0 :(得分:0)
我将此作为答案添加,因为以这种方式发布代码更容易,但它并没有真正解决您原来的问题。您可能希望根据我们的评论和答案更新您的问题。
“旋转线程”只是意味着创建一个线程并启动它,你正在使用这段代码:
thread1 = StageGui.myThread(1, "Thread-1", 1)
thread1.start()
您只需更改代码即可在按钮处理程序中执行此操作。我不熟悉tkinter,但它应该是这样的:
def button_handler():
thread1 = StageGui.myThread(1, "Thread-1", 1)
thread1.start()
b = Button(main, text="Spin Thread", command=button_handler)
b.pack()
这需要在你做完之后发生:
main = tk.Tk()