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 循环while和for in简单实例
Aug 16 Python
Python模拟登陆实现代码
Jun 14 Python
Python基于高斯消元法计算线性方程组示例
Jan 17 Python
Python学习小技巧总结
Jun 10 Python
Python实现按逗号分隔列表的方法
Oct 23 Python
Python人脸识别第三方库face_recognition接口说明文档
May 03 Python
pyqt5 从本地选择图片 并显示在label上的实例
Jun 13 Python
python conda操作方法
Sep 11 Python
python获取array中指定元素的示例
Nov 26 Python
pytorch 准备、训练和测试自己的图片数据的方法
Jan 10 Python
python interpolate插值实例
Jul 06 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
Feb 22 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
一个SQL管理员的web接口
2006/10/09 PHP
linux系统上支持php的 iconv()函数的方法
2011/10/01 PHP
Zend Framework中的简单工厂模式 图文
2012/07/10 PHP
利用PHP扩展vld查看PHP opcode操作步骤
2013/03/04 PHP
is_uploaded_file函数引发的不能上传文件问题
2013/10/29 PHP
window.open()弹出居中的窗口
2007/02/01 Javascript
jquery一般方法介绍 入门参考
2011/06/21 Javascript
jquery操作angularjs对象
2015/06/26 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
select下拉框插件jquery.editable-select详解
2017/01/22 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
canvas绘制多边形
2017/02/24 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
2017/08/14 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
2018/03/20 Javascript
vue组件实现进度条效果
2018/06/06 Javascript
Vue项目中最新用到的一些实用小技巧
2018/11/06 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
2020/09/07 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
Vue使用Ref跨层级获取组件的步骤
2021/01/25 Vue.js
[49:31]TFT vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
easy_install python包安装管理工具介绍
2013/02/10 Python
python多线程编程中的join函数使用心得
2014/09/02 Python
Python下载网络文本数据到本地内存的四种实现方法示例
2018/02/05 Python
对python自动生成接口测试的示例讲解
2018/11/30 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
python学习之使用Matplotlib画实时的动态折线图的示例代码
2021/02/25 Python
有750多个顶级品牌的瑞士时尚在线:ABOUT YOU
2017/01/04 全球购物
Omio波兰:全欧洲低价大巴、火车和航班搜索和比价
2018/02/16 全球购物
英国建筑用品在线:Building Supplies Online(BSO)
2018/04/30 全球购物
党的群众路线教育实践活动对照检查剖析材料
2014/10/09 职场文书
学校隐患排查制度
2015/08/05 职场文书
2016父亲节感恩话语
2015/12/09 职场文书
委托书范本格式
2019/04/18 职场文书
python读取pdf格式文档的实现代码
2021/04/01 Python
python实现监听键盘
2021/04/26 Python