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?
Répondre
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.
J'ai de la difficulté à comprendre comment utiliser select. Connaissez-vous des exemples qui seraient pertinents à ma situation? – dpcd
@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
@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
- 1. Ubuntu rapidement (python/gtk) - comment surveiller stdin?
- 2. Comment fermer la fenêtre stdout/stderr en python?
- 3. Comment supprimer des lignes de stdout en python?
- 4. stdout python couleur et tee
- 5. Je cherche un exemple sur la façon d'utiliser select.select() avec le sous-processus pour surveiller stdout
- 6. python - problème d'actualisation de plusieurs lignes stdout
- 7. Comment fermer le canal stdout en supprimant un processus démarré avec le sous-processus Popen python?
- 8. Python, C: feux de stdout [Errno 9]
- 9. Stdout capturé à partir du tube en Python est tronqué
- 10. Bibliothèque Python pour surveiller/proc/diskstats?
- 11. Comment faire pour attraper python stdout dans le code C++
- 12. Python - Impression sur stdout sur un "terminal"
- 13. Comment écrire des données binaires dans stdout dans python 3?
- 14. Comment faire pour sortir stdout dans une chaîne (Python)
- 15. Comment surveiller le trafic réseau avec MySQL?
- 16. Comment surveiller en continu rhythmbox pour le changement de piste en utilisant python
- 17. stdout unbuffered en python (comme dans -u python) à partir du programme
- 18. Comment surveiller les flux en C++
- 19. sortie stdout avec vitesse spécifique
- 20. Surveiller le trafic en Java
- 21. Sous-processus Python - Rediriger stdout/err à deux endroits
- 22. Comment je redirige python stdout vers C stdin en utilisant des pipelines dans linux
- 23. Recherche de STDOUT en PHP
- 24. comment surveiller un serveur (mapserver)
- 25. python stdout cacher subprocess et attendre pour compléter
- 26. Surveiller les sites Web visités en utilisant Internet Explorer, Opera, Chrome, Firefox et Safari en Python
- 27. Certaines commandes Python ne sont pas interceptées dans Stdout
- 28. Attraper entrée unique caractère sur stdin en sortie à stdout en Python
- 29. _popen dans windows avec stdout et stdin
- 30. stdout Redirection avec api bas niveau en C
On dirait un lien pertinent: http://stackoverflow.com/questions/375427/non-blocking-read-on-a-stream-in-python – pyfunc