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的Bottle框架中使用微信API的示例
Apr 23 Python
python下实现二叉堆以及堆排序的示例
Sep 29 Python
PyCharm在win10的64位系统安装实例
Nov 26 Python
Python简单实现控制电脑的方法
Jan 22 Python
Python迭代器定义与简单用法分析
Apr 30 Python
Python使用requests提交HTTP表单的方法
Dec 26 Python
Python Opencv任意形状目标检测并绘制框图
Jul 23 Python
pygame实现贪吃蛇游戏(下)
Oct 29 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
Jan 20 Python
使用python matplotlib 画图导入到word中如何保证分辨率
Apr 16 Python
Python字符串的15个基本操作(小结)
Feb 03 Python
python和opencv构建运动检测器的实现
Mar 03 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
thinkphp3.0 模板中函数的使用
2012/11/13 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
PHP+Ajax验证码验证用户登录
2016/07/20 PHP
通用javascript脚本函数库 方便开发
2009/10/13 Javascript
尝试在让script的type属性等于text/html
2013/01/15 Javascript
Javascript表格翻页效果实现思路及代码
2013/08/23 Javascript
JS对话框_JS模态对话框showModalDialog用法总结
2014/01/11 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
JS实现判断滚动条滚到页面底部并执行事件的方法
2014/12/18 Javascript
跟我学习javascript的prototype原型和原型链
2015/11/18 Javascript
JavaScript统计网站访问次数的实现代码
2015/11/18 Javascript
JavaScript函数节流概念与用法实例详解
2016/06/20 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
2017/01/22 Javascript
微信小程序图片宽100%显示并且不变形
2017/06/21 Javascript
详解vue.js移动端配置flexible.js及注意事项
2019/04/10 Javascript
通过vue写一个瀑布流插件代码实例
2019/09/07 Javascript
vuex入门最详细整理
2020/03/04 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
详解vue之自行实现派发与广播(dispatch与broadcast)
2021/01/19 Vue.js
编写Python爬虫抓取暴走漫画上gif图片的实例分享
2016/04/20 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
Python-opencv实现红绿两色识别操作
2020/06/04 Python
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
沙龙级头发造型工具:FOXYBAE
2018/07/01 全球购物
英国最大的割草机购买网站:Just Lawnmowers
2019/11/02 全球购物
幼儿园母亲节活动方案
2014/03/10 职场文书
委托书范文
2014/04/02 职场文书
中班上学期幼儿评语
2014/04/30 职场文书
英语四级考试作弊检讨书
2014/09/29 职场文书
个人年终总结怎么写
2015/03/09 职场文书
现实表现证明材料
2015/06/19 职场文书
小学大队长竞选稿
2015/11/20 职场文书
2017元旦、春节期间廉洁自律承诺书
2016/03/25 职场文书
python 详解turtle画爱心代码
2022/02/15 Python
Linux下使用C语言代码搭建一个简单的HTTP服务器
2022/04/13 Servers