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实现线程池的方法
Jun 30 Python
Python导出DBF文件到Excel的方法
Jul 25 Python
Python常用内置模块之xml模块(详解)
May 23 Python
Python之Scrapy爬虫框架安装及使用详解
Nov 16 Python
解决python3 安装完Pycurl在import pycurl时报错的问题
Oct 15 Python
python 并发编程 多路复用IO模型详解
Aug 20 Python
Python递归及尾递归优化操作实例分析
Feb 01 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
Mar 13 Python
pytorch加载语音类自定义数据集的方法教程
Nov 10 Python
python实现定时发送邮件
Dec 23 Python
python+selenium实现12306模拟登录的步骤
Jan 21 Python
python实现高效的遗传算法
Apr 07 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 JS Ip地址及域名格式检测代码
2013/09/27 PHP
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
PHP判断文章里是否有图片的简单方法
2014/07/26 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
PHP编程求最大公约数与最小公倍数的方法示例
2017/05/29 PHP
PHP按符号截取字符串的指定部分的实现方法
2018/09/10 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
2020/04/06 PHP
JavaScript回调(callback)函数概念自我理解及示例
2013/07/04 Javascript
JSONP之我见
2015/03/24 Javascript
ECMAScript5(ES5)中bind方法使用小结
2015/05/07 Javascript
javascript实现无缝上下滚动特效
2015/12/16 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
2016/07/11 Javascript
微信小程序 加载 app-service.js 错误解决方法
2016/10/12 Javascript
VUE2.0 ElementUI2.0表格el-table自适应高度的实现方法
2018/11/28 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
[03:10]2014DOTA2 TI马来劲旅Titan首战告捷目标只是8强
2014/07/10 DOTA
[58:35]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
python连接mongodb操作数据示例(mongodb数据库配置类)
2013/12/31 Python
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
Python中实现变量赋值传递时的引用和拷贝方法
2018/04/29 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
2019/01/10 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
python try except返回异常的信息字符串代码实例
2019/08/15 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
2019/08/31 Python
一些常用的HTML5模式(pattern) 总结
2015/07/14 HTML / CSS
绿色美容,有机护肤品和化妆品:Safe & Chic
2018/10/29 全球购物
化学学院毕业生自荐信范文
2013/12/17 职场文书
周年庆典邀请函范文
2014/01/24 职场文书
顶撞老师检讨书
2014/02/07 职场文书
贷款委托书怎么写
2014/08/02 职场文书
民主评议党员自我评议范文2014
2014/09/26 职场文书
企业法人代表证明书
2014/09/27 职场文书
Win10防火墙白名单怎么设置?Win10添加防火墙白名单方法
2022/04/06 数码科技
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
2022/04/06 Vue.js