218 votes

Comment obtenir le code de sortie lors de l'utilisation de la méthode de communication sous-processus Python?

Désolé si cela est évident, mais comment puis-je récupérer le code de sortie lors de l'utilisation du module de sous-processus de Python et de la méthode communic ()?

Code pertinent:

 import subprocess as sp
data = sp.Popen(openRTSP + opts.split(), stdout=sp.PIPE).communicate()[0]
 

Devrais-je faire cela d'une autre manière?

312voto

Eli Bendersky Points 82298

Popen.subprocess définira l'attribut returncode quand c'est fait (*). Voici la section de documentation pertinente:

 Popen.returncode 
  The child return code, set by poll() and wait() (and indirectly by communicate()). 
  A None value indicates that the process hasn't terminated yet.

  A negative value -N indicates that the child was terminated by signal N (Unix only).
 

Donc, vous pouvez simplement faire (je ne l'ai pas testé mais cela devrait fonctionner):

 import subprocess as sp
child = sp.Popen(openRTSP + opts.split(), stdout=sp.PIPE)
streamdata = child.communicate()[0]
rc = child.returncode
 

(*) Cela est dû à la façon dont il est implémenté: après avoir configuré les threads pour lire les flux de l'enfant, il appelle simplement wait .

15voto

Noufal Ibrahim Points 32200

Vous devez d'abord vous assurer que le processus est en cours d'exécution et que le code de retour a été lu à l'aide de la méthode .wait . Cela retournera le code. Si vous souhaitez y accéder ultérieurement, il est stocké sous la forme .returncode dans l'objet Popen .

7voto

khachik Points 12589

``. Le processus enfant sera bloqué si il écrit dans/erreur de sortie standard, et/ou lit depuis l’entrée standard, et il n’y a aucun pair.

-4voto

orzel Points 33

Jusqu'à présent, toutes les réponses mentionnent le «code retour», qui est quelque chose de différent du «code de sortie» demandé dans la question initiale.

  • Le code de sortie est le code renvoyé par le processus appelé (en utilisant exit ()).
  • Le code de retour, comme expliqué par pythoncode, est une valeur indiquant si le processus s'est terminé normalement ou non.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X