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实现线程池的方法
Jun 30 Python
python中实现迭代器(iterator)的方法示例
Jan 19 Python
Python人脸识别初探
Dec 21 Python
详解Python之unittest单元测试代码
Jan 24 Python
python中numpy的矩阵、多维数组的用法
Feb 05 Python
基于Python List的赋值方法
Jun 23 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
Aug 05 Python
Python3.5内置模块之random模块用法实例分析
Apr 26 Python
pycharm重命名文件的方法步骤
Jul 29 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
python能开发游戏吗
Jun 11 Python
pycharm中选中一个单词替换所有重复单词的实现方法
Nov 17 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+DBM的同学录程序(4)
2006/10/09 PHP
php中preg_replace_callback函数简单用法示例
2016/07/21 PHP
js类的静态属性和实例属性的理解
2009/10/01 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
2016/12/25 Javascript
深入解析js轮播插件核心代码的实现过程
2017/04/14 Javascript
React Native react-navigation 导航使用详解
2017/12/01 Javascript
nodejs初始化init的示例代码
2018/10/10 NodeJs
ES6的Fetch异步请求的实现方法
2018/12/07 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
Python实现微信公众平台自定义菜单实例
2015/03/20 Python
python更新列表的方法
2015/07/28 Python
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
Python 查看文件的读写权限方法
2018/01/23 Python
python实现教务管理系统
2018/03/12 Python
分享PyCharm的几个使用技巧
2019/11/10 Python
python飞机大战pygame碰撞检测实现方法分析
2019/12/17 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
2020/02/26 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
python3安装OCR识别库tesserocr过程图解
2020/04/02 Python
python em算法的实现
2020/10/03 Python
Raleigh兰令自行车美国官网:英国凤头牌自行车
2018/01/08 全球购物
报社实习生自荐信
2014/01/24 职场文书
财务部总监岗位职责
2014/03/12 职场文书
勾股定理课后反思
2014/04/26 职场文书
不服从上级领导安排的检讨书
2014/09/14 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
六一儿童节新闻稿
2015/07/17 职场文书
超市员工管理制度
2015/08/06 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书
PHP使用非对称加密算法RSA
2021/04/21 PHP
Python Django / Flask如何使用Elasticsearch
2022/04/19 Python