nebucade | Bonjour,
Voila, je veu créée un service windows, pour ecouté un port, et en fonction de ce que j'ai, faire differente action.
le code : Code :
- # Permet d'ecouter un port et d'executer des commande;
- from socket import *
- from string import *
- import os
- import win32service
- import win32event
- import win32evtlog
- import win32evtlogutil
- import win32serviceutil
- import win32process
- class WinService (win32serviceutil.ServiceFramework):
- _svc_name_ = "Servive_Onduleur"
- _svc_display_name_ = "Gestion arret du serveur, par onduleur !"
-
-
- def __init__(self, args):
- win32serviceutil.ServiceFramework.__init__(self, args)
- # Evenement declenché lors de l'arret du service
- self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
- # Evenement dont on se sert pour la boucle infinie
- self.hService = win32event.CreateEvent(None, 0, 0, None)
- self.log_type = "Gestion des appel de l'onduleur"
- def SvcStop (self):
-
- self.irc.close()
- self.identd.close()
- # Arret
- win32evtlogutil.ReportEvent(self.log_type, 2, eventType=win32evtlog.EVENTLOG_INFORMATION_TYPE, strings=["Message d'arret"])
- self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
- win32event.SetEvent(self.hWaitStop)
-
- def SvcDoRun(self):
- # Pas d'initialisation
- # Declenche l'evenement hService qui permet de passer dans
- # en continu dans la fonction DoBatch ()
- win32evtlogutil.ReportEvent(self.log_type, 1, eventType=win32evtlog.EVENTLOG_INFORMATION_TYPE, strings=["Message de démarrage"])
- win32event.SetEvent (self.hService)
- # Boucle
- while 1:
- # Attend une demande d'arret ou la fin de la tempo
- rc = win32event.WaitForMultipleObjects((self.hWaitStop,self.hService),0, win32event.INFINITE)
- # Arrete le service
- if rc==win32event.WAIT_OBJECT_0:
- # Stop event
- break
- # Traitement
- else:
- # Mon service !
- self.DoBatch ()
- win32event.SetEvent (self.hService)
- # Fin
- self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING, 5000)
- def DoBatch (self):
- # C'est dans cette fonction que tu colle ton code. C'est ce qui sera exécuté par le service !
- self.identd = socket(AF_INET, SOCK_STREAM)
- self.identd.bind(('', 32000))
- self.identd.listen(1)
- while 1:
- self.irc, self.irchost = self.identd.accept()
- text = self.irc.recv(512)
- if self.irchost[0]=='10.1.1.4':
- text = split(text)
- if text[-1]=="fait_dodo":
- os.system("shutdown /s" )
- self.irc.close()
-
- if __name__=='__main__':
- win32serviceutil.HandleCommandLine(WinService)
|
je sais le code n'est pas tres propre mais c'est pour un teste pour le moment.
Donc, quant je le compile pas de probleme, quant je l'execute en install pas de probleme il ce met bien dans le gestionnaire des service windows.
Par contre quant il demare il s'arrete et me dit :
The instance's SvcRun() method failed File "win32serviceutil.pyc", line 715, in SvcRun exceptions.AttributeError: WinService instance has no attribute 'SvcDoRun'
Merci de bien vouloir m'aidé meme si vous n'avais pas la reponse je prend toute les idées.
@+ Message édité par nebucade le 22-09-2006 à 11:36:01
|