将一个python程序改写成一个windows服务

2022年5月10日 19点热度 0人点赞

如果我们需要将程序一直保持在后台运行,一般都会做成服务在后台运行,但是具体要如何实现呢,我这边提供源代码,只需要将标注的部分改成自己的代码即可

工具/原料

  • Python3,Pyinstall,

方法/步骤

  1. 1

    import win32serviceutil 

    import win32service 

    import win32event 

    import os

    import socket

    class PythonService(win32serviceutil.ServiceFramework): 

        #服务名

        _svc_name_ = "weater"

        #服务显示名称

        _svc_display_name_ = "weater"

        #服务描述

        _svc_description_ = "天气服务"

     

        def __init__(self, args): 

            win32serviceutil.ServiceFramework.__init__(self, args) 

            self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)

            self.isAlive = True

        def SvcDoRun(self):

            import time

            while self.isAlive:

                sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

                result = sock.connect_ex(('127.0.0.1', 80))

                if result != 0:

                    os.popen('python D:\\test\\web_Django\\we\\manage.py runserver 0.0.0.0:80')

                    time.sleep(8)

                sock.close()

                time.sleep(20)

                

        def SvcStop(self): 

            # 先告诉SCM停止这个过程 

            self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) 

            # 设置事件 

            win32event.SetEvent(self.hWaitStop) 

            self.isAlive = False

     

    if __name__=='__main__': 

        win32serviceutil.HandleCommandLine(PythonService)

  2. 2

    只需要将代码中的

                sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

                result = sock.connect_ex(('127.0.0.1', 80))

                if result != 0:

                    os.popen('python D:\\test\\web_Django\\we\\manage.py runserver 0.0.0.0:80')

                    time.sleep(8)

                sock.close()

    替换成自己需要执行的事件即可,我这个示例的意思是循环监控80端口是否是开启状态,如果关闭了就执行启动命令,用于实现程序的后台稳定运行。

  3. 3

    Windows下将服务安装到系统方法:

    安装服务

    python PythonService.py install

    让服务自动启动

    python PythonService.py --startup auto install

    启动服务

    python PythonService.py start

    重启服务

    python PythonService.py restart

    停止服务

    python PythonService.py stop

    删除/卸载服务

    python PythonService.py remove

    使用pyinstaller打包为exe可放到任意机器上安装服务:D:\python\Scripts>pyinstaller -F --hidden-import=win32timezone D:\test\test.py

    END
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部

laozhao

这个人很懒,什么都没留下

文章评论