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中用fork()函数生成的子进程
May 04 Python
详解python单例模式与metaclass
Jan 15 Python
python实现简易通讯录修改版
Mar 13 Python
NLTK 3.2.4 环境搭建教程
Sep 19 Python
python3去掉string中的标点符号方法
Jan 22 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
Sep 16 Python
使用tqdm显示Python代码执行进度功能
Dec 08 Python
pycharm中import呈现灰色原因的解决方法
Mar 04 Python
基于Python的Jenkins的二次开发操作
May 12 Python
如何利用python发送邮件
Sep 26 Python
Python本地及虚拟解释器配置过程解析
Oct 13 Python
Pycharm 设置默认解释器路径和编码格式的操作
Feb 05 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操作XML、读取数据和写入数据的实现代码
2014/08/15 PHP
PHP测试成功的邮件发送案例
2015/10/26 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
thinkPHP5.0框架引入Traits功能实例分析
2017/03/18 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
php读取本地json文件的实例
2018/03/07 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
PHP dirname简单使用代码实例
2020/11/13 PHP
JS支持带x身份证号码验证函数
2008/08/10 Javascript
开发跨浏览器javascript常见注意事项
2009/01/01 Javascript
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
Android中的jQuery:AQuery简介
2014/05/06 Javascript
node.js中的path.extname方法使用说明
2014/12/09 Javascript
JavaScript编写简单的计算器
2015/11/25 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
2016/05/10 Javascript
通过原生JS实现为元素添加事件的方法
2016/11/23 Javascript
深入浅析Vue组件开发
2016/11/25 Javascript
JavaScript实现自定义媒体播放器方法介绍
2017/01/03 Javascript
js保留两位小数方法总结
2018/01/31 Javascript
Python写的一个简单监控系统
2015/06/19 Python
python 实现图片旋转 上下左右 180度旋转的示例
2019/01/24 Python
Python----数据预处理代码实例
2019/03/20 Python
解决在pycharm运行代码,调用CMD窗口的命令运行显示乱码问题
2019/08/23 Python
Ranorex通过Python将报告发送到邮箱的方法
2020/01/12 Python
django模型动态修改参数,增加 filter 字段的方式
2020/03/16 Python
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
《雪地里的小画家》教学反思
2014/02/22 职场文书
辅导员评语
2014/05/04 职场文书
素质教育标语
2014/06/27 职场文书
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
法人单位授权委托书范文
2014/10/06 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis