|
最近在自学py编程,在做一个简单的windows服务小程序,遇到了无法解决的问题,请大神们帮帮小弟。 问题是这样的,用python Pythonservice.py debug命令能正常运行的,但是python Pythonservice.py start 就不正常。 显示错误如下: F:\workspace\python>python PythonService.py start Starting service PythonService Error starting service: 服务没有及时响应启动或控制请求。 我非常怀疑是系统的权限问题,但不知如何解决。在此先谢谢大神们了!
python版本:python3.6.0
系统:windows7 家庭高级版64位
- # -*- coding: utf-8 -*-
- import win32serviceutil
- import win32service
- import win32event
- import os
- import logging
- import inspect
- import servicemanager
- class PythonService(win32serviceutil.ServiceFramework):
- _svc_name_ = "PythonService" #服务名
- _svc_display_name_ = "Python Service Test" #服务在windows系统中显示的名称
- _svc_description_ = "This is a python service test code " #服务的描述
- def __init__(self, args):
- win32serviceutil.ServiceFramework.__init__(self, args)
- self.stop_event = win32event.CreateEvent(None, 0, 0, None)
- # self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
- self.logger = self._getLogger()
- self.run = True
- def _getLogger(self):
- 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.info("service is run....")
- while self.run:
- self.logger.info("I am runing....")
- time.sleep(2)
- def SvcStop(self):
- self.logger.info("service is stop....")
- self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
- #win32event.SetEvent(self.hWaitStop)
- win32event.SetEvent(self.stop_event)
- self.ReportServiceStatus(win32service.SERVICE_STOPPED)
- self.run = False
- if __name__=='__main__':
- import sys
- if len(sys.argv) == 1:
- try:
- evtsrc_dll = os.path.abspath(servicemanager.__file__)
- servicemanager.PrepareToHostSingle(PythonService)
- servicemanager.Initialize('PythonService', evtsrc_dll)
- servicemanager.StartServiceCtrlDispatcher()
- except win32service.error as details:
- import winerror
- if details[0] == winerror.ERROR_FAILED_SERVICE_CONTROLLER_CONNECT:
- win32serviceutil.usage()
- else:
- win32serviceutil.HandleCommandLine(PythonService)
复制代码
|
|