Python制作Windows系统服务


Posted in Python onMarch 25, 2017

最近有个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 相关文章推荐
python字符串连接方式汇总
Aug 21 Python
在Python3中使用asyncio库进行快速数据抓取的教程
Apr 02 Python
python中reduce()函数的使用方法示例
Sep 29 Python
Python实现按逗号分隔列表的方法
Oct 23 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
Nov 16 Python
PyQt5显示GIF图片的方法
Jun 17 Python
python3 map函数和filter函数详解
Aug 26 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
Jan 14 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
Mar 12 Python
基于python实现音乐播放器代码实例
Jul 01 Python
Keras搭建自编码器操作
Jul 03 Python
python 数据类型强制转换的总结
Jan 25 Python
Python 类的继承实例详解
Mar 25 #Python
python利用拉链法实现字典方法示例
Mar 25 #Python
python3实现ftp服务功能(服务端 For Linux)
Mar 24 #Python
python3实现ftp服务功能(客户端)
Mar 24 #Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
Mar 24 #Python
python 类详解及简单实例
Mar 24 #Python
Python类的动态修改的实例方法
Mar 24 #Python
You might like
用PHP和ACCESS写聊天室(九)
2006/10/09 PHP
PHP IPV6正则表达式验证代码
2010/02/16 PHP
php如何实现数据库的备份和恢复
2020/11/30 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
jQuery实现底部浮动窗口效果
2016/09/07 Javascript
node操作mysql数据库实例详解
2017/03/17 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
微信小程序自定义组件
2017/08/16 Javascript
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
小程序实现多选框功能
2018/10/30 Javascript
深入理解Node内建模块和对象
2019/03/12 Javascript
vue防止花括号{{}}闪烁v-text和v-html、v-cloak用法示例
2019/03/13 Javascript
JS常见错误(Error)及处理方案详解
2020/07/02 Javascript
vue 监听 Treeselect 选择项的改变操作
2020/08/31 Javascript
[03:10]超级美酒第四天 fy拉比克秀 大合集
2018/06/05 DOTA
python编写网页爬虫脚本并实现APScheduler调度
2014/07/28 Python
在Python中关于中文编码问题的处理建议
2015/04/08 Python
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
Django中Model的使用方法教程
2018/03/07 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
python微信撤回监测代码
2019/04/29 Python
详解pandas数据合并与重塑(pd.concat篇)
2019/07/09 Python
利用python画出AUC曲线的实例
2020/02/28 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
python 检测图片是否有马赛克
2020/12/01 Python
香港时尚女装购物网站:ZAFUL
2017/07/19 全球购物
什么是View State?
2013/01/27 面试题
求职推荐信范文
2013/12/01 职场文书
《三顾茅庐》教学反思
2014/04/10 职场文书
巴黎圣母院观后感
2015/06/10 职场文书