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模块学习 filecmp 文件比较
Aug 27 Python
Python编程中的文件操作攻略
Oct 16 Python
Python使用Mechanize模块编写爬虫的要点解析
Mar 31 Python
Python 多核并行计算的示例代码
Nov 07 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
Jan 05 Python
python如何为创建大量实例节省内存
Mar 20 Python
opencv与numpy的图像基本操作
Mar 08 Python
python异步存储数据详解
Mar 19 Python
如何学习Python time模块
Jun 03 Python
完美解决python针对hdfs上传和下载的问题
Jun 05 Python
Python打印不合法的文件名
Jul 31 Python
python 绘制场景热力图的示例
Sep 23 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
10个实用的PHP代码片段
2011/09/02 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
2016/03/21 PHP
jQuery实战之品牌展示列表效果
2011/04/10 Javascript
mailto的使用技巧分享
2012/12/21 Javascript
jquery 显示*天*时*分*秒实现时间计时器
2014/05/07 Javascript
js中的for如何实现foreach中的遍历
2014/05/31 Javascript
jQuery中eq()方法用法实例
2015/01/05 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
ajax+jQuery实现级联显示地址的方法
2015/05/06 Javascript
Bootstrap安装环境配置教程分享
2016/05/27 Javascript
下一代Bootstrap的5个特点 超酷炫!
2016/06/17 Javascript
javascript实现鼠标点击页面 移动DIV
2016/12/02 Javascript
基于vue2.x的电商图片放大镜插件的使用
2018/01/22 Javascript
JavaScript代码调试方法实例小结
2019/01/05 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
2020/12/10 Javascript
[01:08:09]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第二局
2016/03/02 DOTA
[04:16]完美世界DOTA2联赛PWL S2 集锦第一期
2020/11/23 DOTA
用实例分析Python中method的参数传递过程
2015/04/02 Python
Python中zfill()方法的使用教程
2015/05/20 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
编写多线程Python服务器 最适合基础
2018/09/14 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
Python爬虫学习之获取指定网页源码
2019/07/30 Python
Python 变量的创建过程详解
2019/09/02 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
Python @property装饰器原理解析
2020/01/22 Python
python实现TCP文件传输
2020/03/20 Python
什么是属性访问器
2015/10/26 面试题
工作人员思想汇报
2014/01/09 职场文书
初一体育教学反思
2014/01/29 职场文书
幼儿园运动会加油词
2014/02/14 职场文书
让生命充满爱观后感
2015/06/08 职场文书
谢师宴学生致辞
2015/07/27 职场文书
2015年国庆节演讲稿范文
2015/07/30 职场文书
详解Laravel框架的依赖注入功能
2021/05/27 PHP