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代码检查工具pylint 让你的python更规范
Sep 05 Python
Python在Windows和在Linux下调用动态链接库的教程
Aug 18 Python
在Python中通过threading模块定义和调用线程的方法
Jul 12 Python
Python实现的NN神经网络算法完整示例
Jun 19 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
Jul 17 Python
Python实现矩阵相乘的三种方法小结
Jul 26 Python
django基于cors解决跨域请求问题详解
Aug 06 Python
Python面向对象之Web静态服务器
Sep 03 Python
keras tensorflow 实现在python下多进程运行
Feb 06 Python
Jupyter Notebook远程登录及密码设置操作
Apr 10 Python
如何设置PyCharm中的Python代码模版(推荐)
Nov 20 Python
Python+Appium新手教程
Apr 17 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代码包装修正版
2008/03/15 PHP
PHP CLI模式下的多进程应用分析
2013/06/03 PHP
MongoDB在PHP中的常用操作小结
2014/02/20 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
php实现的简单检验登陆类
2015/06/18 PHP
tp5.1 框架查询表达式用法详解
2020/05/25 PHP
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
jQuery实现的左右移动焦点图效果
2016/01/14 Javascript
js返回顶部实例分享
2016/12/21 Javascript
ES6概念 ymbol.for()方法
2016/12/25 Javascript
js实现自动轮换选项卡
2017/01/13 Javascript
ECMAScript6 新特性范例大全
2017/03/24 Javascript
解决vue router使用 history 模式刷新后404问题
2017/07/19 Javascript
nodejs发送http请求时遇到404长时间未响应的解决方法
2017/12/10 NodeJs
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
vue2.5.2使用http请求获取静态json数据的实例代码
2018/02/27 Javascript
Angular 5.x 学习笔记之Router(路由)应用
2018/04/08 Javascript
jQuery实现的简单日历组件定义与用法示例
2018/12/24 jQuery
electron 如何将任意资源打包的方法步骤
2020/04/16 Javascript
[02:46]2014DOTA2国际邀请赛 选手为你解读比赛MVP充满梦想
2014/07/09 DOTA
python解析xml文件实例分享
2013/12/04 Python
Tornado服务器中绑定域名、虚拟主机的方法
2014/08/22 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
2019/11/11 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
2020/03/06 Python
韩国休闲女装品牌网站:ANAIS
2016/08/24 全球购物
LA MER海蓝之谜美国官网:传奇面霜
2016/08/27 全球购物
巴黎卡诗加拿大官网:Kérastase加拿大
2018/11/12 全球购物
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
医院学雷锋活动策划方案
2014/02/15 职场文书
班级道德讲堂实施方案
2014/02/24 职场文书
《穷人》教学反思
2014/04/08 职场文书
二年级评语大全
2014/04/23 职场文书
答谢会策划方案
2014/05/12 职场文书
家庭贫困证明范本(经典版)
2014/09/22 职场文书
2016年党员创先争优承诺书
2016/03/25 职场文书
Mysql数据库按时间点恢复实战记录
2021/06/30 MySQL