8
votes

Lisez asynchroneusement stdout de subprocess.popen

Je suis en train d'exécuter un sous-programme en utilisant SubProcess.Popen. Lorsque je démarre mon programme Python à partir de la fenêtre de commande (cmd.exe), le programme écrit des informations et des dates dans la fenêtre car le programme évolue.

Quand je mange mon code Python pas dans un Fenêtre de commande, elle ouvre une nouvelle fenêtre de commande pour la sortie de ce sous-programme et je veux éviter cela. Lorsque j'ai utilisé le code suivant, il ne montre pas la fenêtre CMD, mais elle n'imprime pas non plus l'état: xxx

Comment puis-je montrer la sortie du sous-programme Dans la production de mon programme tel qu'il se produit?


4 commentaires

"Fenêtre Windows" Quelle fenêtre Windows? Utilisez-vous un cadre d'interface graphique? Lequel?


Eh bien, je court le modèle à travers Arcgis. Lorsque je clique sur mon outil, j'ai créé là-bas, une fenêtre passe et montre les progrès. Je veux voir des lignes apparaissant dans ma fenêtre de commande.


Et désolé pour le wiki. Je n'ai pas de viande à cliquer cette option.


Python3 w / asyncio C'est ce que vous voulez: kevinmccarthy.org/2016/07/25/...


3 Réponses :


8
votes

Utilisez ceci:

cmd = subprocess.Popen(["c:/flow/flow.exe"], stdout=subprocess.PIPE)
for line in cmd.stdout:
    print line.rstrip("\n")
cmd.wait()  # you may already be handling this in your current code


3 commentaires

alternativement à la "ligne.RStrip .." Vous pouvez utiliser "ligne" (notez la virgule suivante)


pour la ligne in iter (cmd.stdout.readline, ""): Ligne d'impression , peut fournir une sortie plus immédiate en évitant éventuellement éviter la mémoire tampon de lecture dans l'itérateur de fichiers (note: le sous-programme doit toujours rincer son stdout)


Ne vois pas pourquoi c'est async.



0
votes

C'est un ancien poste, mais un problème commun avec une solution difficile à trouver. Essayez ceci: http: // code .activeState.com / Recettes / 440554-Module-to-Autoriser-Subprocess-sous-processus-user-on-win /


1 commentaires

Malheureusement, cette solution il n'y a pas d'asynchrone.



2
votes

À la recherche d'une recette pour traiter les données popen Asynchrone, j'ai trébuché sur http://code.activestate.com/recipes/576759-subprocess-with-aSync-io-pipes-class/

Cela semble assez prometteur, mais j'ai eu l'impression qu'il pourrait y avoir des fautes de frappe. Pas encore essayé.


0 commentaires