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