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实现百度关键词排名查询
Mar 30 Python
python中MySQLdb模块用法实例
Nov 10 Python
python实现TF-IDF算法解析
Jan 02 Python
Python实现针对给定单链表删除指定节点的方法
Apr 12 Python
python开发游戏的前期准备
May 05 Python
Jacobi迭代算法的Python实现详解
Jun 29 Python
在Python中os.fork()产生子进程的例子
Aug 08 Python
python 浅谈serial与stm32通信的编码问题
Dec 18 Python
用python解压分析jar包实例
Jan 16 Python
django为Form生成的label标签添加class方式
May 20 Python
python中pyplot基础图标函数整理
Nov 10 Python
python中pdb模块实例用法
Jan 15 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
zend framework配置操作数据库实例分析
2012/12/06 PHP
Yii不依赖Model的表单生成器用法实例
2014/12/04 PHP
Java和PHP在Web开发方面对比分析
2015/03/01 PHP
PHP中抽象类和抽象方法概念与用法分析
2016/05/24 PHP
PHP开发的微信现金红包功能示例
2017/06/29 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
设定php简写功能的方法
2019/11/28 PHP
YII2框架中日志的配置与使用方法实例分析
2020/03/18 PHP
弹出广告特效代码(一个IP只弹出一次)
2007/05/11 Javascript
jQuery 表格工具集
2010/04/25 Javascript
js编写trim()函数及正则表达式的运用
2013/10/24 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
JavaScript中setMonth()方法的使用详解
2015/06/11 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
2016/01/26 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
jquery实现的table排序功能示例
2017/03/10 Javascript
JS排序之冒泡排序详解
2017/04/08 Javascript
基于Bootstrap的标签页组件及bootstrap-tab使用说明
2017/07/25 Javascript
JavaScript中使用Async实现异步控制
2017/08/15 Javascript
React学习之事件绑定的几种方法对比
2017/09/24 Javascript
vue实现商品加减计算总价的实例代码
2018/08/12 Javascript
vue.js实现的幻灯片功能示例
2019/01/18 Javascript
layui树形菜单动态遍历的例子
2019/09/23 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
2020/06/16 Javascript
详解vue v-model
2020/08/31 Javascript
用Nodejs实现在终端中炒股的实现
2020/10/18 NodeJs
django 发送邮件和缓存的实现代码
2018/07/18 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
对django的User模型和四种扩展/重写方法小结
2019/08/17 Python
Django自带日志 settings.py文件配置方法
2019/08/30 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
班组长岗位职责
2014/03/03 职场文书
Vue Element plus使用方法梳理
2022/12/24 Vue.js