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 :

utiliser les PID sous Windows XP (waitpid,etc)


Sujet :

Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut utiliser les PID sous Windows XP (waitpid,etc)
    Voilà je commence à bosser avec python et je galère pas mal avec la gestion des applications externes. Je lance un script avec : subprocess.Popen(...), j'ai cru comprendre que c'était mieux que les autres solutions. Bref, je récupère le pid du process avec subprocess.Popen(...).pid
    Le problème c'est que os.waitpid(pid,0) ne marche pas, tout comme la fonction poll() sur l'objet Popen (retourne None en permanence). Donc impossible de tester l'état de mon process...ce qui est embetant.
    Je précise que je n'ai aucun contrôle sur les scripts appelés donc impossible d'envisager une solution du style : créer un fichier au début et le supprimer ensuite.

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par busard Voir le message
    Voilà je commence à bosser avec python et je galère pas mal avec la gestion des applications externes. Je lance un script avec : subprocess.Popen(...), j'ai cru comprendre que c'était mieux que les autres solutions. Bref, je récupère le pid du process avec subprocess.Popen(...).pid
    Le problème c'est que os.waitpid(pid,0) ne marche pas, tout comme la fonction poll() sur l'objet Popen (retourne None en permanence). Donc impossible de tester l'état de mon process...ce qui est embetant.
    Je précise que je n'ai aucun contrôle sur les scripts appelés donc impossible d'envisager une solution du style : créer un fichier au début et le supprimer ensuite.
    Les notions de fork/exec pid/ppid et pipe sont des notions exclusivement unix (et systèmes apparentés). Donc ça ne fonctionnera pas sous zindow...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Pourtant il existe les commandes tasklist et taskill sous WinXP, ces commandes manipulent les PID. Je vais essayer d'executer les commandes et faire une analyse syntaxique du résultat, c'est pas très beau mais ça devrait suffire

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bon c'est bon j'ai réussi à m'en sortir, voici la fonction pour ceux que ça intéresse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    def existProcess(pid):
        find = False
        # command which searches the line in tasklist with this pid
        cmd="for /f \"tokens=2 delims= \" %i in ('tasklist') do echo \" %i \""
        handle = os.popen(cmd)
        for line in handle:
            if line.count(" "+strPid+" "):# add spaces to avoid sub string to be count
                find = True
                break
        handle.close()
        return find

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    et voici la commande wait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    # return true if application ended or false if application is still running after timeout     
    # no timeout if timeout < 0
    def waitForAppli(pid,timeout):
        start = time.clock()
        current = start
        print "Waiting for AppliPID PID:", pid
        while existProcess(pid) and ( (timeout<0) or (current - start)<timeout):
            time.sleep(0.01)
            current = time.clock()
        if existProcess(pid):
            return False
        return True

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. espace dans les glob sous Windows
    Par SYL666 dans le forum Langage
    Réponses: 3
    Dernier message: 06/10/2006, 12h49
  2. c'est quoi les Services sous Windows?
    Par kammour dans le forum Windows
    Réponses: 3
    Dernier message: 15/03/2006, 21h31
  3. Utilisation de JNI sous Windows
    Par madislak dans le forum Entrée/Sortie
    Réponses: 30
    Dernier message: 23/02/2006, 20h22
  4. Les interruptions sous Windows et Linux
    Par Descartes dans le forum x86 32-bits / 64-bits
    Réponses: 7
    Dernier message: 07/06/2003, 22h42
  5. utilisation des sockets sous windows
    Par Tupac dans le forum Réseau
    Réponses: 2
    Dernier message: 21/12/2002, 18h24

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