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正则表达式去掉数字中的逗号(python正则匹配逗号)
Dec 25 Python
利用QT写一个极简单的图形化Python闹钟程序
Apr 07 Python
Python中的Matplotlib模块入门教程
Apr 15 Python
Python类属性与实例属性用法分析
May 09 Python
python数据类型_元组、字典常用操作方法(介绍)
May 30 Python
Python原始字符串与Unicode字符串操作符用法实例分析
Jul 22 Python
在python中实现强制关闭线程的示例
Jan 22 Python
Python多线程爬取豆瓣影评API接口
Oct 22 Python
pytorch梯度剪裁方式
Feb 04 Python
Python之qq自动发消息的示例代码
Feb 18 Python
Python 解决空列表.append() 输出为None的问题
May 23 Python
Python多线程 Queue 模块常见用法
Jul 04 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+FFMPEG实现将视频自动转码成H264标准Mp4文件
2014/09/24 PHP
PHP实现动态创建XML文档的方法
2018/03/30 PHP
JS 继承实例分析
2008/11/04 Javascript
jquery插件之easing 动态菜单
2010/08/21 Javascript
js 判断checkbox是否选中的实现代码
2010/11/23 Javascript
javascript从右边截取指定字符串的三种实现方法
2013/11/29 Javascript
jQuery实现弹出窗口中切换登录与注册表单
2015/06/05 Javascript
浅谈javascript中return语句
2015/07/15 Javascript
jQuery实现动画效果circle实例
2015/08/06 Javascript
JS实现兼容性好,带缓冲的动感网页右键菜单效果
2015/09/18 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
2015/11/23 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
2015/12/03 Javascript
详解JavaScript逻辑Not运算符
2015/12/04 Javascript
EasyUI 结合JS导出Excel文件的实现方法
2016/11/10 Javascript
JavaScript 2018 中即将迎来的新功能
2018/09/21 Javascript
谈谈JavaScript中super(props)的重要性
2019/02/12 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
js实现适配移动端的拖动效果
2020/01/13 Javascript
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
简单介绍Python中的round()方法
2015/05/15 Python
Python File readlines() 使用方法
2018/03/19 Python
Python动态生成多维数组的方法示例
2018/08/09 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
Python中捕获键盘的方式详解
2019/03/28 Python
Chemist Warehouse中文网:澳洲连锁大药房
2021/02/05 全球购物
如何设置Java的运行环境
2013/04/05 面试题
经典英文广告词
2014/03/18 职场文书
社会发展项目建议书
2014/08/25 职场文书
2014教育局对照检查材料思想汇报
2014/09/23 职场文书
教师个人工作总结范文2014
2014/11/10 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
民事二审代理词
2015/05/25 职场文书
Python djanjo之csrf防跨站攻击实验过程
2021/05/14 Python
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python
Nginx配置文件详解以及优化建议指南
2021/09/15 Servers
Django实现WebSocket在线聊天室功能(channels库)
2021/09/25 Python