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实现一个音乐检索器的功能
Nov 15 Python
一步步教你用Python实现2048小游戏
Jan 19 Python
利用Python脚本实现ping百度和google的方法
Jan 24 Python
python中利用xml.dom模块解析xml的方法教程
May 24 Python
Python爬虫之模拟知乎登录的方法教程
May 25 Python
用python做一个搜索引擎(Pylucene)的实例代码
Jul 05 Python
详解python eval函数的妙用
Nov 16 Python
对Python 文件夹遍历和文件查找的实例讲解
Apr 26 Python
python 实现敏感词过滤的方法
Jan 21 Python
关于Python3 类方法、静态方法新解
Aug 30 Python
使用python快速实现不同机器间文件夹共享方式
Dec 22 Python
详解python 内存优化
Aug 17 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 面向对象 PHP5 中的常量
2010/05/05 PHP
遍历指定目录下的所有目录和文件的php代码
2011/11/27 PHP
一个简单的网页密码登陆php代码
2012/07/17 PHP
php生成zip文件类实例
2015/04/07 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
js Calender控件使用详解
2015/01/05 Javascript
js 判断附件后缀的简单实现方法
2016/10/11 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
javascript正则表达式模糊匹配IP地址功能示例
2017/01/06 Javascript
JQueryEasyUI框架下的combobox的取值和绑定的方法
2017/01/22 Javascript
原生JavaScript实现Tooltip浮动提示框特效
2017/03/07 Javascript
angular bootstrap timepicker TypeError提示怎么办
2017/06/13 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
2017/12/21 Javascript
jQuery中each遍历的三种方法实例分析
2018/09/07 jQuery
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
[05:17]DOTA2誓师:今天我们在这里 明天TI4等我!
2014/03/26 DOTA
利用Python实现Windows定时关机功能
2017/03/21 Python
对matplotlib改变colorbar位置和方向的方法详解
2018/12/13 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
用python解压分析jar包实例
2020/01/16 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
canvas使用注意点总结
2013/07/19 HTML / CSS
H&M旗下高端女装品牌:& Other Stories
2018/05/07 全球购物
高中生毕业自我鉴定范文
2013/12/22 职场文书
个人社会实践自我鉴定
2014/03/24 职场文书
2014幼儿教师个人工作总结
2014/12/03 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
2014普法依法治理工作总结
2014/12/18 职场文书
办公用品质量保证书
2015/05/11 职场文书
少先队工作总结2015
2015/05/13 职场文书
民间借贷借条范本
2015/05/25 职场文书
golang实现一个简单的websocket聊天室功能
2021/10/05 Golang