Question

J'ai reçu un message indiquant que le script xyz.py a renvoyé le code de sortie 0 . Qu'est-ce que cela signifie?

Que signifient les codes de sortie en Python? Combien y en a-t-il? Lesquels sont importants?

Était-ce utile?

La solution

Ce que vous recherchez dans le script, ce sont les appels à sys.exit () . L'argument de cette méthode est renvoyé à l'environnement en tant que code de sortie.

Il est fort probable que le script n'appelle jamais la méthode exit et que 0 soit le code de sortie par défaut.

Autres conseils

De la la documentation de sys.exit :

  

L'argument optionnel arg peut être un   entier donnant le statut de sortie   (par défaut à zéro), ou un autre type   d'objet. Si c'est un entier, zéro   est considéré comme une terminaison réussie & # 8221;   et toute valeur non nulle est considérée   Terminaison anormale & # 8221; par des coquilles et   le même. La plupart des systèmes en ont besoin   être dans la gamme 0-127, et produire   résultats indéfinis sinon. Certains   les systèmes ont une convention pour   attribuer des significations spécifiques à   codes de sortie spécifiques, mais ceux-ci sont   généralement sous-développé; Unix   les programmes utilisent généralement 2 pour la commande   les erreurs de syntaxe de ligne et 1 pour tous les autres   type d'erreurs.

Un exemple d'utilisation de codes de sortie concerne les scripts de shell. En bash, vous pouvez vérifier la variable spéciale $? pour le dernier statut de sortie:

me@mini:~$ python -c ""; echo $?
0
me@mini:~$ python -c "import sys; sys.exit(0)"; echo $?
0
me@mini:~$ python -c "import sys; sys.exit(43)"; echo $?
43

Personnellement, j'essaie d'utiliser les codes de sortie que je trouve dans /usr/include/asm-generic/errno.h (sur un système Linux), mais je ne sais pas s'il s'agit du bonne chose à faire.

Il existe un module errno qui définit l'exit standard. codes:

Par exemple, L'autorisation refusée correspond au code d'erreur 13 :

.
import errno, sys

if can_access_resource():
    do_something()
else:
    sys.exit(errno.EACCES)

Pour mémoire, vous pouvez utiliser les codes de sortie standard POSIX définis ici . / p>

Exemple:

import sys, os

try:
    config()
except:
    sys.exit(os.EX_CONFIG) 
try:
    do_stuff()
except:
    sys.exit(os.EX_SOFTWARE)
sys.exit(os.EX_OK) # code 0, all ok

Les codes de sortie de 0 signifient généralement "rien d’erreur ici". Toutefois, si le programmeur du script ne suit pas les conventions, vous devrez peut-être consulter la source pour voir ce que cela signifie. Généralement, une valeur non nulle est renvoyée sous forme de code d'erreur.

Les commandes du système d'exploitation ont des codes de sortie. Recherchez les codes de sortie linux pour consulter des informations à ce sujet. Le shell utilise les codes de sortie pour décider si le programme a fonctionné, a rencontré des problèmes ou a échoué. Des efforts ont été faits pour créer des codes de sortie standard (ou du moins couramment utilisés). Consultez cette publication du script shell avancé .

Si vous souhaitez utiliser de manière portable les codes de sortie POSIX standard , voir le package exitstatus sur PyPI.

Installez le package:

pip install exitstatus

Utilisez dans votre code:

import sys
from exitstatus import ExitStatus

sys.exit(ExitStatus.success)

Les codes de sortie n'ont que la signification attribuée par l'auteur du script. La tradition Unix veut que le code de sortie 0 signifie 'succès', tout ce qui reste est un échec. Le seul moyen de savoir exactement ce que signifient les codes de sortie d'un script consiste à examiner le script lui-même.

La réponse est "Dépend de ce que le code de sortie signifie" "

Cependant, dans la plupart des cas, cela signifie "Tout va bien"

j'aime POSIX:

Donc, sur le shell, je taperais:

script python.py & amp; & amp; echo 'OK' || echo 'Pas OK'

Si mon script python appelle sys.exit (0) , le shell renvoie "OK"

Si mon script python appelle sys.exit (1) (ou tout autre entier différent de zéro), le shell renvoie "Pas correct"

C’est votre travail de faire le malin avec le shell et de lire la documentation (ou la source) de votre script pour voir ce que signifient les codes de sortie.

  

Je recommande un arrêt en mode minimal avec l'exit (0) intégré plutôt que d'utiliser sys.exit ()

Je ne suis pas sûr que ce soit un bon conseil.

La même documentation mentionnée lit:

  

Le module de site (qui est importé automatiquement au démarrage, sauf si l'option de ligne de commande -S est indiquée) ajoute plusieurs constantes à l'espace de nom intégré. Ils sont utiles pour l’interpréteur interactif et ne doivent pas être utilisés dans les programmes .

Ensuite:

  

exit (code = None)

     

Objets qui, une fois imprimés, impriment un message du type «Utilisez quit () ou Ctrl-D (ex. EOF) pour quitter», puis, une fois appelé, soulèvent SystemExit avec le code de sortie spécifié.

Si nous le comparons à sys.exit () documentation, il utilise le même mécanisme que celui qui génère une exception SystemExit .

Les codes de sortie dans de nombreux langages de programmation appartiennent aux programmeurs. Donc, vous devez regarder votre code source du programme (ou manuel). Zéro signifie généralement "tout s'est bien passé".

Pour autoriser les gestionnaires d'exceptions et autres opérations, je recommande un arrêt complet avec exit (0) intégré plutôt que d'utiliser sys.exit () , qui termine le processus de manière abrupte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top