[resolut] Creation d'un service pour windows

Creation d'un service pour windows [resolut] - Python - Programmation

Marsh Posté le 12-07-2006 à 09:10:34    

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 :
  1. # Permet d'ecouter un port et d'executer des commande;
  2. from socket import *
  3. from string import *
  4. import os
  5. import win32service
  6. import win32event
  7. import win32evtlog
  8. import win32evtlogutil
  9. import win32serviceutil
  10. import win32process
  11. class WinService (win32serviceutil.ServiceFramework):
  12.     _svc_name_ = "Servive_Onduleur"
  13.     _svc_display_name_ = "Gestion arret du serveur, par onduleur !"
  14.    
  15.        
  16.     def __init__(self, args):
  17.         win32serviceutil.ServiceFramework.__init__(self, args)
  18.         # Evenement declenché lors de l'arret du service
  19.         self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
  20.         # Evenement dont on se sert pour la boucle infinie
  21.         self.hService = win32event.CreateEvent(None, 0, 0, None)
  22.         self.log_type = "Gestion des appel de l'onduleur"
  23.     def SvcStop (self):
  24.        
  25.         self.irc.close()
  26.         self.identd.close()
  27.         # Arret
  28.         win32evtlogutil.ReportEvent(self.log_type, 2, eventType=win32evtlog.EVENTLOG_INFORMATION_TYPE, strings=["Message d'arret"])
  29.         self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
  30.         win32event.SetEvent(self.hWaitStop)
  31.        
  32.     def SvcDoRun(self):
  33.         # Pas d'initialisation
  34.         # Declenche l'evenement hService qui permet de passer dans
  35.         # en continu dans la fonction DoBatch ()
  36.         win32evtlogutil.ReportEvent(self.log_type, 1, eventType=win32evtlog.EVENTLOG_INFORMATION_TYPE, strings=["Message de démarrage"])
  37.         win32event.SetEvent (self.hService)
  38.         # Boucle
  39.         while 1:
  40.             # Attend une demande d'arret ou la fin de la tempo
  41.             rc = win32event.WaitForMultipleObjects((self.hWaitStop,self.hService),0, win32event.INFINITE)
  42.             # Arrete le service
  43.             if rc==win32event.WAIT_OBJECT_0:
  44.                 # Stop event
  45.                 break
  46.                 # Traitement
  47.             else:
  48.                 # Mon service !
  49.                 self.DoBatch ()
  50.                 win32event.SetEvent (self.hService)
  51.             # Fin
  52.             self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING, 5000)
  53.     def DoBatch (self):
  54.         # C'est dans cette fonction que tu colle ton code. C'est ce qui sera exécuté par le service !
  55.         self.identd = socket(AF_INET, SOCK_STREAM)
  56.         self.identd.bind(('', 32000))
  57.         self.identd.listen(1)
  58.         while 1:
  59.             self.irc, self.irchost = self.identd.accept()
  60.             text = self.irc.recv(512)
  61.             if self.irchost[0]=='10.1.1.4':
  62.                 text = split(text)
  63.                 if text[-1]=="fait_dodo":
  64.                     os.system("shutdown /s" )
  65.             self.irc.close()
  66.        
  67. if __name__=='__main__':
  68.     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
Reply

Marsh Posté le 12-07-2006 à 09:10:34   

Reply

Marsh Posté le 17-08-2006 à 01:58:42    

sans en etre sur puisqu'il manque cette ligne 715 ou survient l'erreur...
Apparemment ton instance de cette classe a bien ete creee mais à cette fameuse ligne 715 tu fais appel à l'attribut WinService.SvcDoRun alors qu'il s'agit d'une methode donc à appeler par

Code :
  1. WinService.SvcDoRun()


enfin il manque les parentheses quoi (je pense :o)


Message édité par gocho le 17-08-2006 à 02:00:31

---------------
Mon feedback
Reply

Marsh Posté le 18-08-2006 à 10:30:46    

En fait la ligne 715 vient du librairy win32serviceutil est ce n'est pas moi qu'il l'est fait. (je sais on s'en doute lol)
 
je te rassure les parentheses y sont bien
 
merci quant meme

Reply

Marsh Posté le 01-09-2006 à 15:37:42    

Et bien apres quelque teste toujours le meme probleme !!
 
Personne n'aurai une idée, s'il vous plait

Reply

Marsh Posté le 01-09-2006 à 23:42:57    

toujours le meme message d'erreur? pourrais tu mettre la portion de code indiquee dans le message d'erreur stp.
les alentours de la ligne 715 du fichier win32serviceutil.pyc


---------------
Mon feedback
Reply

Marsh Posté le 21-09-2006 à 10:23:55    

   def SvcRun(self):
 
        self.ReportServiceStatus(win32service.SERVICE_RUNNING)
        self.SvcDoRun()
        # Once SvcDoRun terminates, the service has stopped.
        # We tell the SCM the service is still stopping - the C framework
        # will automatically tell the SCM it has stopped when this returns.
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed