이 글은 Windows 시스템 서비스를 만들기 위한 Python 관련 정보를 위주로 소개하고 있으니 관심 있는 분들은
참고하시기 바랍니다. 설치하고 Windows 시스템 서비스로 실행하는 과정에서 몇 가지 함정을 발견하고 정리했습니다.
Python 서비스 클래스
먼저 Python 프로그램은 시스템 서비스 역할을 하기 위해 일부 Windows 시스템 API를 호출해야 합니다.
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import time import win32api import win32event import win32service import win32serviceutil import servicemanager class MyService(win32serviceutil.ServiceFramework): _svc_name_ = "MyService" _svc_display_name_ = "My Service" _svc_description_ = "My Service" def init(self, args): self.log('init') win32serviceutil.ServiceFramework.init(self, args) self.stop_event = win32event.CreateEvent(None, 0, 0, None) def SvcDoRun(self): self.ReportServiceStatus(win32service.SERVICE_START_PENDING) try: self.ReportServiceStatus(win32service.SERVICE_RUNNING) self.log('start') self.start() self.log('wait') win32event.WaitForSingleObject(self.stop_event, win32event.INFINITE) self.log('done') except BaseException as e: self.log('Exception : %s' % e) self.SvcStop() def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) self.log('stopping') self.stop() self.log('stopped') win32event.SetEvent(self.stop_event) self.ReportServiceStatus(win32service.SERVICE_STOPPED) def start(self): time.sleep(10000) def stop(self): pass def log(self, msg): servicemanager.LogInfoMsg(str(msg)) def sleep(self, minute): win32api.Sleep((minute*1000), True) if name == "main": if len(sys.argv) == 1: servicemanager.Initialize() servicemanager.PrepareToHostSingle(MyService) servicemanager.StartServiceCtrlDispatcher() else: win32serviceutil.HandleCommandLine(MyService)
pyinstaller 패키징
pyinstaller -F MyService.py
테스트
# 安装服务 dist\MyService.exe install # 启动服务 sc start MyService # 停止服务 sc stop MyService # 删除服务 sc delete MyService
위 내용은 Python에서 Windows 시스템 서비스를 생성하는 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!