Ошибка: экземпляр службы не имеет атрибута SvcDoRun.

Использование python 2.7 на 64-битной машине Windows 7. Я перешел по ссылке http://essiene.blogspot.in/2005/04/python-windows-services.html Но возникает ошибка, когда в журналах Windows средства просмотра событий отображается как Traceback (последний последний вызов): Файл "C:\Python27\lib\site-packages\win32\ lib\win32serviceutil.py", строка 835, в SvcRun self.SvcDoRun() AttributeError: Экземпляр Myservice не имеет атрибута "SvcDoRun".

Фрагмент кода выглядит так:

import win32service
import win32serviceutil
import win32api
import win32con
class Myservice(win32serviceutil.ServiceFramework):
    _svc_name_ = "Myservice"
    _svc_display_name_ = "Myservice"

def __init__(self,args):
    win32serviceutil.ServiceFramework.__init__(self,args)
    self.isAlive = True

def SvcDoRun(self):
    while self.isAlive:
        if len(List)!=0:
            for i in range(0,len(List)):
                t = ThreadClass(NameList[i],name)
                t.start()

def SvcStop(self):
    import servicemanager

    self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
    self.isAlive = False

def ctrlHandler(ctrlType):
    return True

if __name__ == '__main__':
    win32api.SetConsoleCtrlHandler(ctrlHandler, True)
    win32serviceutil.HandleCommandLine(Myservice)

person imp    schedule 11.03.2014    source источник


Ответы (1)


Я наткнулся на ту же проблему. Вам нужно сделать отступ для определений функций, иначе они не принадлежат классу MyService. Итак, ваш код должен выглядеть так:

import win32service
import win32serviceutil
import win32api
import win32con
class Myservice(win32serviceutil.ServiceFramework):
    _svc_name_ = "Myservice"
    _svc_display_name_ = "Myservice"

    def __init__(self,args):
        win32serviceutil.ServiceFramework.__init__(self,args)
        self.isAlive = True

    def SvcDoRun(self):
        while self.isAlive:
            if len(List)!=0:
                for i in range(0,len(List)):
                    t = ThreadClass(NameList[i],name)
                    t.start()

    def SvcStop(self):
        import servicemanager

        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        self.isAlive = False

    def ctrlHandler(ctrlType):
        return True

if __name__ == '__main__':
    win32api.SetConsoleCtrlHandler(ctrlHandler, True)
    win32serviceutil.HandleCommandLine(Myservice)
person Torsten    schedule 21.01.2015