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之集合(set)
Sep 24 Python
Python中自定义函数的教程
Apr 27 Python
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
Jun 14 Python
Python使用正则表达式获取网页中所需要的信息
Jan 29 Python
python实现判断一个字符串是否是合法IP地址的示例
Jun 04 Python
使用Python实现租车计费系统的两种方法
Sep 29 Python
Python File(文件) 方法整理
Feb 18 Python
python中metaclass原理与用法详解
Jun 25 Python
一文读懂Python 枚举
Aug 25 Python
python uuid生成唯一id或str的最简单案例
Jan 13 Python
python中添加模块导入路径的方法
Feb 03 Python
Django rest framework如何自定义用户表
Jun 09 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
php array_search() 函数使用
2010/04/13 PHP
用穿越火线快速入门php面向对象
2012/02/22 PHP
php获取数组中重复数据的两种方法
2013/06/28 PHP
php 模拟 asp.net webFrom 按钮提交事件的思路及代码
2013/12/02 PHP
PHP修改session_id示例代码
2014/01/08 PHP
CodeIgniter中实现泛域名解析
2014/07/19 PHP
Django 中 cookie的使用
2017/08/17 PHP
PHP7 弃用功能
2021/03/09 PHP
JS实现淘宝幻灯片效果的实现方法
2013/03/22 Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
2013/11/21 Javascript
jquery实现浮动的侧栏实例
2015/06/25 Javascript
JavaScript程序设计之JS调试
2015/12/09 Javascript
实例详解jQuery表单验证插件validate
2016/01/18 Javascript
JavaScript实现时钟滴答声效果
2017/01/29 Javascript
jQuery Mobile漏洞会有跨站脚本攻击风险
2017/02/12 Javascript
Node.js中多进程模块Cluster的介绍与使用
2017/05/27 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
2017/09/13 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
JavaScript实现单例模式实例分享
2017/12/22 Javascript
详解vue-cli官方脚手架配置
2018/07/20 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
2018/10/09 Javascript
深入理解移动前端开发之viewport
2018/10/19 Javascript
解决JQuery的ajax函数执行失败alert函数弹框一闪而过问题
2019/04/10 jQuery
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
[01:02:55]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python爬虫之网页图片抓取的方法
2018/07/16 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
澳大利亚时尚前卫设计师珠宝在线:Amber Sceats
2017/10/04 全球购物
全球最大的中文旅行网站:去哪儿网
2017/11/16 全球购物
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
2014年计生工作总结
2014/11/21 职场文书
前台岗位职责
2015/02/13 职场文书
python获取对象信息的实例详解
2021/07/07 Python
十大最强电系宝可梦,阿尔宙斯电系之一,第七被称为雷神
2022/03/18 日漫
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库