繁体   English   中英

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

[英]run a program as a service when it is called in the python script

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM