python程序封装为win32服务的方法


Posted in Python onMarch 07, 2021

本文实例为大家分享了python程序封装为win32服务的具体代码,供大家参考,具体内容如下

# encoding=utf-8
import os
import sys
import winerror
import win32serviceutil
import win32service
import win32event
import servicemanager
 
 
class PythonService(win32serviceutil.ServiceFramework):
 
 # 服务名
 _svc_name_ = "PythonService1"
 # 服务显示名称
 _svc_display_name_ = "PythonServiceDemo"
 # 服务描述
 _svc_description_ = "Python service demo."
 
 def __init__(self, args):
 win32serviceutil.ServiceFramework.__init__(self, args)
 self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
 self.logger = self._getLogger()
 self.isAlive = True
 
 def _getLogger(self):
 import logging
 import os
 import inspect
 
 logger = logging.getLogger('[PythonService]')
 
 this_file = inspect.getfile(inspect.currentframe())
 dirpath = os.path.abspath(os.path.dirname(this_file))
 handler = logging.FileHandler(os.path.join(dirpath, "service.log"))
 
 formatter = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
 handler.setFormatter(formatter)
 
 logger.addHandler(handler)
 logger.setLevel(logging.INFO)
 
 return logger
 
 def SvcDoRun(self):
 import time
 self.logger.error("svc do run....")
 try:
  while self.isAlive:
  self.logger.error("I am alive.")
  time.sleep(1)
  # 等待服务被停止
  # win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE)
 except Exception as e:
  self.logger.error(e)
  time.sleep(60)
 
 def SvcStop(self):
 # 先告诉SCM停止这个过程
 self.logger.error("svc do stop....")
 self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
 # 设置事件
 win32event.SetEvent(self.hWaitStop)
 self.isAlive = False
 
 
if __name__ == '__main__':
 if len(sys.argv) == 1:
 try:
  src_dll = os.path.abspath(servicemanager.__file__)
  servicemanager.PrepareToHostSingle(PythonService)
  servicemanager.Initialize("PythonService", src_dll)
  servicemanager.StartServiceCtrlDispatcher()
 except Exception as e:
  print(e)
  #if details[0] == winerror.ERROR_FAILED_SERVICE_CONTROLLER_CONNECT:
  #win32serviceutil.usage()
 else:
 win32serviceutil.HandleCommandLine(PythonService) # 参数和上述定义类名一致
 
#pip install pywin32
 
# 安装服务
# python PythonService.py install
# 让服务自动启动
# python PythonService.py --startup auto install
# 启动服务
# python PythonService.py start
# 重启服务
# python PythonService.py restart
# 停止服务
# python PythonService.py stop
# 删除/卸载服务
# python PythonService.py remove
 
 
# 在用户变量处去掉python路径,然后在环境变量加入python路径
# C:\Users\zhongjianhui\AppData\Local\Programs\Python\Python36\Lib\site-packages\pywin32_system32;
# C:\Users\zhongjianhui\AppData\Local\Programs\Python\Python36\Lib\site-packages\win32;
# C:\Users\zhongjianhui\AppData\Local\Programs\Python\Python36\Scripts\;
#C:\Users\zhongjianhui\AppData\Local\Programs\Python\Python36\

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python列表list数组array用法实例解析
Oct 28 Python
python实现拓扑排序的基本教程
Mar 11 Python
python smtplib模块自动收发邮件功能(二)
May 22 Python
用Python实现筛选文件脚本的方法
Oct 27 Python
python3 pygame实现接小球游戏
May 14 Python
新手入门Python编程的8个实用建议
Jul 12 Python
Python实现一个数组除以一个数的例子
Jul 20 Python
python中的&&及||的实现示例
Aug 07 Python
简单了解为什么python函数后有多个括号
Dec 19 Python
PyTorch笔记之scatter()函数的使用
Feb 12 Python
python遍历路径破解表单的示例
Nov 21 Python
Python函数对象与闭包函数
Apr 13 Python
pygame游戏之旅 添加icon和bgm音效的方法
Nov 21 #Python
pygame游戏之旅 添加游戏暂停功能
Nov 21 #Python
使用50行Python代码从零开始实现一个AI平衡小游戏
Nov 21 #Python
pygame游戏之旅 调用按钮实现游戏开始功能
Nov 21 #Python
pygame游戏之旅 按钮上添加文字的方法
Nov 21 #Python
Face++ API实现手势识别系统设计
Nov 21 #Python
详解django自定义中间件处理
Nov 21 #Python
You might like
自定义PHP分页函数
2006/10/09 PHP
PHP5与MySQL数据库操作常用代码 收集
2010/03/21 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
jQuery UI AutoComplete 自动完成使用小记
2010/08/21 Javascript
Jquery动态改变图片IMG的src地址示例
2013/06/25 Javascript
使用AOP改善javascript代码
2015/05/01 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
详解有关easyUI的拖动操作中droppable,draggable用法例子
2017/06/03 Javascript
详解关于vue-area-linkage走过的坑
2018/06/27 Javascript
Vue中的异步组件函数实现代码
2018/07/20 Javascript
bootstrap动态调用select下拉框的实例代码
2018/08/09 Javascript
Node.js + express基本用法教程
2019/03/14 Javascript
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
vue-路由精讲 二级路由和三级路由的作用
2020/08/06 Javascript
vue实现点击出现操作弹出框的示例
2020/11/05 Javascript
[47:38]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python模块搜索概念介绍及模块安装方法介绍
2015/06/03 Python
python3 模拟登录v2ex实例讲解
2017/07/13 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
小 200 行 Python 代码制作一个换脸程序
2020/05/12 Python
解决Python 函数声明先后顺序出现的问题
2020/09/02 Python
怎样声明接口
2014/09/19 面试题
英文求职信结束语大全
2013/10/26 职场文书
业务内勤岗位职责
2014/04/30 职场文书
世博会口号
2014/06/20 职场文书
企业安全生产目标责任书
2014/07/23 职场文书
县政协领导班子群众路线教育实践活动四风问题整改方案
2014/10/26 职场文书
2015年党员自评材料
2014/12/17 职场文书
小学生教师节广播稿
2015/08/19 职场文书
2016圣诞节贺卡寄语
2015/12/07 职场文书
《陶罐和铁罐》教学反思
2016/03/03 职场文书
SQL注入详解及防范方法
2021/12/06 MySQL
css3手动实现pc端横向滚动
2022/06/21 HTML / CSS