首页 > 编程 > Python > 正文

python程序封装为win32服务的方法

2020-02-15 23:45:34
字体:
来源:转载
供稿:网友

本文实例为大家分享了python程序封装为win32服务的具体代码,供大家参考,具体内容如下

# encoding=utf-8import osimport sysimport winerrorimport win32serviceutilimport win32serviceimport win32eventimport 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/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林站长站。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表