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 :

communication entre processus


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Par défaut communication entre processus
    bonjour,

    mon programme principal Princ.py lance un processus indépendant.
    le processus indépendant écrit dans son stdout
    le problème se produit lorsque via un timer, j'essais de lire toute les secondes le stdout du processus indépendant.
    mon programme principal se bloque.
    le processus indépendant fonctionne normalement.

    code du programme principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    global p
    p = subprocess.Popen(mes_args, stdout=subprocess.PIPE)
    .........
    self.timer2.Start(1000)
    .........
    def OnTimer(self,evt):
          global p
          if p.poll() == None:
            print p.stdout.read()
          else:
            self.timer2.Stop()
    code du process indépendant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sys.stdout.write("mon message bla bla\n")
    par avance merci

  2. #2
    Membre confirmé
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Par défaut
    le processus lancé avec Popen ne peut-il communiquer avec son parent ?
    ou Popen ne sert-il qu'à lancer un programme indépendant ?

    merci pour vos réponses

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Par défaut
    faute de solutions "propres" je pense que je vais me rabattre vers une communication au travers d'un simple fichier.
    le parcours de sites anglophones révèle le problème d'un blocage de processus lors de la lecture de stdout ou stderr avec Popen() sans y apporter de solutions...je continue ma recherche car je ne peux pas me faire à l'idée qu'un langage comme python ne puisse pas faire communiquer proprement des processus entre eux ...

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Par défaut
    le blocage provient de la lecture du stdout du process enfant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    msg = p.stdout.read()
    ....

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Par défaut
    le processus enfant ne peut transmettre le contenu de son stdout que lorsqu'il se termine (exit())
    Le processus parent lit le stdout du processus enfant via communicate.
    je recherche une solution pour que le processus parent accède au stdout du processus enfant avant que ce dernier ne se termine.
    en gros je recherche à obtenir les infos du processus enfant au fil de l'eau durant son exécution

    par avance merci

  6. #6
    Membre émérite Avatar de sloshy
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2005
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 728
    Par défaut
    Bonjour,

    Je ne suis pas expert en python (ni en processus d'ailleur) loins de là mais l'utilisation de thread ne te faciliterait-elle pas la vie?

    amicallement, sloshy

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Par défaut
    la doc indique que par défaut le bufsize de Popen est égal à zéro et communicate renvoie les données à la fin du process enfant.
    j'espère que je n'aurai pas passer par les sockets pour faire communiquer deux processus qui s'exécutent sur la même machine !?.....

  8. #8
    Membre confirmé
    Inscrit en
    Septembre 2002
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 63
    Par défaut
    j'ai utilisé un simple fichier que le processus père lit périodiquement.
    la solution n'est pas très propre mais ça fonctionne

    merci pour votre aide

  9. #9
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    merci pour votre aide
    Surtout felicitations à toi de chercher activement par toi même.
    Si tous les utilisateurs du forum faisaient comme toi.... ce serait le bonheur

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

Discussions similaires

  1. Communication entre processus
    Par annemarie dans le forum Windows
    Réponses: 3
    Dernier message: 11/05/2009, 15h47
  2. [C#]Communication entre processus
    Par ShamSS dans le forum C#
    Réponses: 5
    Dernier message: 28/02/2009, 19h39
  3. [VB.Net][Threading] Communication entre processus
    Par DonF dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/02/2006, 15h15
  4. Lecture standard et communication entre processus!
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/07/2003, 16h37
  5. Communication entre processus
    Par markopolo dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/06/2003, 16h21

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