各位用户为了找寻关于Python制作Windows系统服务的资料费劲了很多周折。这里教程网为您整理了关于Python制作Windows系统服务的相关资料,仅供查阅,以下为您介绍关于Python制作Windows系统服务的详细内容
最近有个Python程序需要安装并作为Windows系统服务来运行,过程中碰到一些坑,整理了一下。
Python服务类
首先Python程序需要调用一些Windows系统API才能作为系统服务,具体内容如下:
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
#!/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打包
? 1pyinstaller
-
F MyService.py
测试
? 1 2 3 4 5 6 7 8 9 10 11# 安装服务
distMyService.exe install
# 启动服务
sc start MyService
# 停止服务
sc stop MyService
# 删除服务
sc delete MyService
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。