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 过滤字符串的技巧,map与itertools.imap
Sep 06 Python
python实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
Python内置函数dir详解
Apr 14 Python
在Python中用has_key()方法查找键是否存在的教程
May 21 Python
Python调用ctypes使用C函数printf的方法
Aug 23 Python
python字典一键多值实例代码分享
Jun 14 Python
python 读取修改pcap包的例子
Jul 23 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
Feb 18 Python
用python介绍4种常用的单链表翻转的方法小结
Feb 24 Python
python中有帮助函数吗
Jun 19 Python
如何使用Python提取Chrome浏览器保存的密码
Jun 09 Python
FP-growth算法发现频繁项集——构建FP树
Jun 24 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
smarty模板引擎中自定义函数的方法
2015/01/22 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
2019/10/21 PHP
浅析jquery的作用与优势
2013/12/02 Javascript
随鼠标移动的时钟非常漂亮遗憾的是只支持IE
2014/08/12 Javascript
利用纯Vue.js构建Bootstrap组件
2016/11/03 Javascript
BootstrapTable请求数据时设置超时(timeout)的方法
2017/01/22 Javascript
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
angular+ionic返回上一页并刷新页面
2017/08/08 Javascript
import与export在node.js中的使用详解
2017/09/28 Javascript
使用vue2实现购物车和地址选配功能
2018/03/29 Javascript
分享5个小技巧让你写出更好的 JavaScript 条件语句
2018/10/20 Javascript
layDate日期控件使用方法详解
2018/11/15 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
微信小程序实现音频文件播放进度的实例代码
2020/03/02 Javascript
JS求解两数之和算法详解
2020/04/28 Javascript
js实现手表表盘时钟与圆周运动
2020/09/18 Javascript
Vue Element校验validate的实例
2020/09/21 Javascript
[01:18]PWL开团时刻DAY10——一拳超人
2020/11/11 DOTA
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
在python中的socket模块使用代理实例
2014/05/29 Python
Django静态资源URL STATIC_ROOT的配置方法
2014/11/08 Python
使用Python实现简单的服务器功能
2017/08/25 Python
利用python打开摄像头及颜色检测方法
2018/08/03 Python
django 环境变量配置过程详解
2019/08/06 Python
python BlockingScheduler定时任务及其他方式的实现
2019/09/19 Python
python deque模块简单使用代码实例
2020/03/12 Python
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
怎样写演讲稿
2014/01/04 职场文书
经销商培训邀请函
2014/01/21 职场文书
函授毕业生自我鉴定范文
2014/03/25 职场文书
学校安全生产承诺书
2014/05/23 职场文书
工作态度怎么写
2015/06/25 职场文书
关于国庆节的广播稿
2015/08/19 职场文书
小学数学教师研修日志
2015/11/13 职场文书
教你nginx跳转配置的四种方式
2022/07/07 Servers