在python脚本中调用程序时,将其作为服务运行

在python脚本中调用程序时,将其作为服务运行,python,Python,我有一个小GUI,它可以启动一个程序(预装的应用程序)作为线程中的子进程,但现在我希望当我按下GUI中的按钮时,该程序作为服务运行 我可以监视子进程吗。如果不可能,我怎么做 GUI的代码如下所示: #!/usr/bin/python import Tkinter as tk import subprocess import os import signal import threading class StageGui: process=0 def __init__(sel

我有一个小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()

我添加这个作为一个答案,因为这样发布代码更容易,但它并没有真正解决您最初的问题。您可能希望根据我们的评论和此答案更新您的问题

“旋转线程”只意味着创建线程并启动它,您正在使用以下代码执行此操作:

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()

它是否需要是一个真正的守护进程,即在关闭python应用程序后继续运行。或者,只要你的GUI还在运行,你就需要它在后台运行吗?我需要应用程序作为服务运行,直到我退出GUI@ander。在这种情况下,你基本上应该已经完成了。只要连接一个按钮,当你点击它的时候,它就会旋转。你已经试过了吗?遇到问题了吗?@anders你说的旋转神话阅读是什么意思?我不知道,你能告诉我怎么做吗