IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

créer un service windows


Sujet :

Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 192
    Par défaut créer un service windows
    Bonjour, je dois réalisé un script python et le mettre en service, j'ai fait des recherches puis je suis tombé sur un post de Getupa :

    http://www.developpez.net/forums/viewtopic.php?t=232815

    Pour essayer, j'ai repris le code fourni en exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    # A Windows service 
     
    import win32service 
    import win32event 
    import win32evtlog 
    import win32evtlogutil 
    import win32serviceutil 
    import win32process 
    import ConfigParser 
    import time, os, sys 
    from ftplib import FTP 
     
    class WinService (win32serviceutil.ServiceFramework): 
        _svc_name_ = "NomService" 
        _svc_display_name_ = "Nom Service affiché" 
     
        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 = "nom pour le journal des evts" 
     
        def SvcStop(self): 
            # 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 ! 
            os.system("c:\go.bat")
            pass 
     
    if __name__=='__main__': 
        win32serviceutil.HandleCommandLine(WinService)
    dans la def DoBatch, je souhaite exécuter un fichier batch qui contient plusieurs lignes de commandes et qui attend un dialogue
    Cependant rien ne se produit, je n'arrive pas à dialoguer avec le serveur.


    Quand je lance le .bat à la main, celui m'ouvre une console DOS et attend. Avec le script ça ne marche pas.

    Comment puis-je contourner ce problème??

    j'ai essayé avec os.popen, os.spawnl...

    merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 192
    Par défaut
    Je viens de tester avec le module subprocess.

    Il y a une chose que je trouve bizzare, c'est que quand je lance mes process via la console python :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    >>> import subprocess
    >>> subprocess.Popen("c:\monrepertoire\go.bat")
    ça me le lance dans la fenetre.

    Personnellmement je m'en fous qu'il y ait une console qui s'affiche.
    Car ce service est destiné à être installé sur une machine virtuelle windows.

    Existe-il un moyen de faire celà?

    Merci

Discussions similaires

  1. [WinService][C#] Comment déployer un service windows ?
    Par sokette dans le forum Windows Forms
    Réponses: 5
    Dernier message: 27/04/2005, 16h38
  2. Planifier le démarrage d'un service Window
    Par tscoops dans le forum Windows XP
    Réponses: 2
    Dernier message: 29/03/2005, 14h56
  3. [WD7.5] Service Windows
    Par cqfd dans le forum WinDev
    Réponses: 1
    Dernier message: 29/03/2005, 08h58
  4. [VB6]Arreter un service windows
    Par bouboussjunior dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 04/10/2004, 17h03
  5. [C#] Icône, barre des tâches et Service Windows
    Par SErhio dans le forum Windows Forms
    Réponses: 17
    Dernier message: 03/09/2004, 12h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo