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模拟登陆Tom邮箱示例分享
Jan 13 Python
python中使用smtplib和email模块发送邮件实例
Apr 22 Python
利用Python命令行传递实例化对象的方法
Nov 02 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
Apr 09 Python
python操作redis方法总结
Jun 06 Python
python 通过类中一个方法获取另一个方法变量的实例
Jan 22 Python
python实现五子棋小程序
Jun 18 Python
python 使用递归实现打印一个数字的每一位示例
Feb 27 Python
Python3操作YAML文件格式方法解析
Apr 10 Python
基于python实现地址和经纬度转换
May 19 Python
python实现三壶谜题的示例详解
Nov 02 Python
基于tensorflow权重文件的解读
May 26 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 高性能书写
2010/12/11 PHP
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
2012/07/31 PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
2012/09/07 PHP
Thinkphp使用mongodb数据库实现多条件查询方法
2014/06/26 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
关于图片验证码设计的思考
2007/01/29 Javascript
JS实现self的resend
2010/07/22 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
2013/12/11 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
asp知识整理笔记3(问答模式)
2015/09/27 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
JS验证不重复验证码
2017/02/10 Javascript
Angular.js与node.js项目里用cookie校验账户登录详解
2017/02/22 Javascript
移动端利用H5实现压缩图片上传功能
2017/03/29 Javascript
node中使用es5/6以及支持性与性能对比
2017/08/11 Javascript
关于express与koa的使用对比详解
2018/01/25 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
关于AOP在JS中的实现与应用详解
2019/05/06 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
2019/09/17 Javascript
Nodejs环境实现socket通信过程解析
2020/07/03 NodeJs
python urllib urlopen()对象方法/代理的补充说明
2017/06/29 Python
好的Python培训机构应该具备哪些条件
2018/05/23 Python
python输入多行字符串的方法总结
2019/07/02 Python
基于python3的socket聊天编程
2020/02/17 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
css3实现图片遮罩效果鼠标hover以后出现文字
2013/11/05 HTML / CSS
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
高中校园广播稿
2014/01/11 职场文书
求职信的七个关键技巧
2014/02/05 职场文书
小学节能减排倡议书
2014/05/15 职场文书
医院深入开展党的群众路线教育实践活动实施方案
2014/08/27 职场文书
赵乐秦在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
扬州个园导游词
2015/02/06 职场文书
2016年母亲节寄语
2015/12/04 职场文书
Oracle 区块链表创建过程详解
2021/05/15 Oracle