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多线程用法实例详解
Jan 15 Python
基于Django contrib Comments 评论模块(详解)
Dec 08 Python
Python读取word文本操作详解
Jan 22 Python
python实现音乐下载器
Apr 15 Python
django2.0扩展用户字段示例
Feb 13 Python
详解Python使用Plotly绘图工具,绘制甘特图
Apr 02 Python
Python静态类型检查新工具之pyright 使用指南
Apr 26 Python
pandas中遍历dataframe的每一个元素的实现
Oct 23 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
Feb 20 Python
Python调用shell cmd方法代码示例解析
Jun 18 Python
Numpy 多维数据数组的实现
Jun 18 Python
python树莓派通过队列实现进程交互的程序分析
Jul 04 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
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
PHP调用C#开发的dll类库方法
2014/07/28 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
2016/10/08 PHP
PHP应用跨时区功能的实现方法
2019/03/21 PHP
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
html页面显示年月日时分秒和星期几的两种方式
2013/08/20 Javascript
jQuery中.live()方法的用法深入解析
2013/12/30 Javascript
javascript教程之不完整的继承(js原型链)
2014/01/13 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
浅谈javascript语法和定时函数
2015/05/03 Javascript
jQuery结合ajax实现动态加载文本内容
2015/05/19 Javascript
jQuery+CSS3折叠卡片式下拉列表框实现效果
2015/11/02 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
javascript实现文件拖拽事件
2018/03/29 Javascript
详解小程序开发经验:多页面数据同步
2019/05/18 Javascript
微信小程序swiper实现文字纵向轮播提示效果
2020/01/21 Javascript
JavaScript console的使用方法实例分析
2020/04/28 Javascript
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
2018/11/30 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
Pytorch中的自动求梯度机制和Variable类实例
2020/02/29 Python
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
英国假发网站:Hothair
2018/02/23 全球购物
shell变量的作用空间是什么
2013/08/17 面试题
考博专家推荐信模板
2013/12/02 职场文书
农民工创业典型事迹
2014/01/25 职场文书
开学季活动策划方案
2014/02/28 职场文书
广告设计应届生求职信
2014/03/01 职场文书
党员服务承诺书
2014/05/28 职场文书
班主任培训研修日志
2015/11/13 职场文书
Python中三种花式打印的示例详解
2022/03/19 Python
MySQL库表太大怎么办? 数据库分库分表项目实践
2022/04/11 MySQL