2010-10-06 5 views
0

J'ai une application linux qui s'exécute interactivement à partir de la ligne de commande en utilisant stdin pour accepter les commandes. J'ai écrit un wrapper en utilisant subprocess pour accéder à stdin pendant que l'application est en arrière-plan. Je peux maintenant lui envoyer des commandes en utilisant p.stdin.write (commande) mais comment puis-je surveiller ses réponses?Comment surveiller stdout avec sous-processus en python?

+1

On dirait un lien pertinent: http://stackoverflow.com/questions/375427/non-blocking-read-on-a-stream-in-python – pyfunc

Répondre

1

Lire à partir de p.stdout pour accéder à la sortie du processus. En fonction de ce que fait le processus, vous devez veiller à ne pas bloquer p.stdout pendant que p bloque à son tour stdin. Si vous êtes certain qu'il affichera une ligne chaque fois que vous écrivez, vous pouvez simplement alternative dans une boucle comme ceci:

while still_going: 
    p.stdin.write('blah\n') 
    print p.stdout.readline() 

Cependant, si la sortie est plus sporadique, vous voudrez peut-être examiner le module select pour alterner entre lire et écrire de manière plus flexible.

+0

J'ai de la difficulté à comprendre comment utiliser select. Connaissez-vous des exemples qui seraient pertinents à ma situation? – dpcd

+0

@dpcd Il existe plusieurs façons d'utiliser select et cela dépend de la structure de votre code quant à la meilleure façon de le faire. Les deux modèles principaux sont "bloquer jusqu'à ce que l'un de ces fichiers devienne accessible en écriture ... puis me dire lesquels sont" et "Ne pas bloquer, il suffit de me dire si les données sont disponibles. en appelant read() sur un fichier qui n'a pas de données prêtes " – Rakis

+0

@dpcd Oh, et' select() 'de Python est un wrapper très fin sur le standard POSIX' select() '. Tous les exemples basés sur C que vous trouverez lors du googling select s'appliquent à peu près de la même façon à python qu'à C (python renvoie juste des listes au lieu de bitmaps). Il y a beaucoup d'exemples et de tutoriels là-bas. – Rakis

Questions connexes