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

2025-11-20 16:46:03

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、只需要将代码中的

            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、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

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢