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的print用法示例
Feb 11 Python
Python md5与sha1加密算法用法分析
Jul 14 Python
详解python上传文件和字符到PHP服务器
Nov 24 Python
win10 64bit下python NLTK安装教程
Sep 19 Python
win7 x64系统中安装Scrapy的方法
Nov 18 Python
对tensorflow 中tile函数的使用详解
Feb 07 Python
python matplotlib实现将图例放在图外
Apr 17 Python
pycharm设置默认的UTF-8编码模式的方法详解
Jun 01 Python
pytorch加载预训练模型与自己模型不匹配的解决方案
May 13 Python
Python人工智能之混合高斯模型运动目标检测详解分析
Nov 07 Python
Python必备技巧之函数的使用详解
Apr 04 Python
Python中Matplotlib的点、线形状、颜色以及绘制散点图
Apr 07 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 获取MySQL数据库里所有表的实现代码
2011/07/13 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
2013/09/28 PHP
PHP中读取文件的8种方法和代码实例
2014/08/05 PHP
总结PHP中数值计算的注意事项
2016/08/14 PHP
使用PHP免费发送定时短信的实例
2016/10/24 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
php图像验证码生成代码
2017/06/08 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
详解写好JS条件语句的5条守则
2019/02/28 Javascript
微信小程序实现折线图的示例代码
2019/06/07 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
javascript实现异形滚动轮播
2019/11/28 Javascript
详解Node.JS模块 process
2020/08/31 Javascript
详解vue-router的导航钩子(导航守卫)
2020/11/02 Javascript
Python的Flask框架与数据库连接的教程
2015/04/20 Python
python 线程的暂停, 恢复, 退出详解及实例
2016/12/06 Python
Python subprocess模块常见用法分析
2018/06/12 Python
python实现可逆简单的加密算法
2019/03/22 Python
对python中arange()和linspace()的区别说明
2020/05/03 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
MANGO官方网站:西班牙芒果服装品牌
2017/01/15 全球购物
美国面料纺织品商城:Fabric.com
2017/06/28 全球购物
Monki官网:斯堪的纳维亚的独立时尚品牌
2020/11/09 全球购物
北京鼎普科技股份有限公司软件测试面试题
2012/04/07 面试题
Python里面如何拷贝一个对象
2014/02/17 面试题
初始化了一个没有run()方法的线程类,是否会出错?
2014/03/27 面试题
运动会表扬稿大全
2014/01/16 职场文书
机关道德讲堂实施方案
2014/03/15 职场文书
八一建军节营销活动方案
2014/08/31 职场文书
八一建军节慰问信
2015/02/14 职场文书
入党积极分子培养联系人意见
2015/08/12 职场文书
社区挂职锻炼个人工作总结
2015/10/23 职场文书
总结一些Java常用的加密算法
2021/06/11 Java/Android
nginx设置资源请求目录的方式详解
2022/05/30 Servers