Réponses:
Ce que vous recherchez dans le script, c'est des appels à sys.exit()
. L'argument de cette méthode est renvoyé à l'environnement en tant que code de sortie.
Il est assez probable que le script n'appelle jamais la méthode exit et que 0 est le code de sortie par défaut.
De la documentation poursys.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. S'il s'agit d'un entier, zéro est considéré comme une «terminaison réussie» et toute valeur non nulle est considérée comme une «terminaison anormale» par des coques et similaires. La plupart des systèmes exigent qu'il soit compris entre 0 et 127 et produisent autrement des résultats indéfinis. Certains systèmes ont une convention pour attribuer des significations spécifiques à des codes de sortie spécifiques, mais ceux-ci sont généralement sous-développés; Les programmes Unix utilisent généralement 2 pour les erreurs de syntaxe de ligne de commande et 1 pour tous les autres types d'erreurs.
Un exemple où les codes de sortie sont utilisés sont dans les scripts shell. Dans 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 si c'est la bonne chose à faire.
grep
rompt cette tendance en quittant avec 1
quand aucune ligne ne correspond et 2
sur les erreurs réelles. Merci beaucoup, Stallman.
Pour mémoire, vous pouvez utiliser les codes de sortie standard POSIX définis ici .
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
exitstatus
package PyPI.
Il existe un errno
module qui définit les codes de sortie standard:
Par exemple, l' autorisation refusée est le code d'erreur 13 :
import errno, sys
if can_access_resource():
do_something()
else:
sys.exit(errno.EACCES)
errno
et errno.h ), mais un code d'état de sortie de 77 (selon os
et sysexits.h ). Les programmes qui émettent le premier sont non standard ( de facto vel jure ) et ne joueront pas bien avec d'autres qui attendent à juste titre le second.
Les codes de sortie de 0 signifient généralement «rien de mal ici». Cependant, si le programmeur du script n'a pas suivi la convention, vous devrez peut-être consulter la source pour voir ce que cela signifie. Habituellement, une valeur non nulle est renvoyée en tant que code d'erreur.
La réponse est "dépend de ce que signifie le code de sortie zéro"
Cependant, dans la plupart des cas, cela signifie "Tout va bien"
J'aime POSIX:
Donc, sur le shell, je taperais:
python script.py && echo 'OK' || echo 'Not OK'
Si mon script python appelle sys.exit(0)
le shell retourne 'OK'
Si mon script python appelle sys.exit(1)
(ou n'importe quel entier différent de zéro), le shell retourne 'Pas OK'
Il vous appartient de vous familiariser avec le shell et de lire la documentation (ou la source) de votre script pour voir ce que signifient les codes de sortie.
Les commandes du système d'exploitation ont des codes de sortie. Recherchez les codes de sortie Linux pour voir 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 sont déployés pour créer des codes de sortie standard (ou du moins couramment utilisés). Voir cette publication Advanced Script Script .
Je recommande un arrêt propre avec la sortie (0) intégrée plutôt que d'utiliser sys.exit ()
Je ne sais pas si c'est un bon conseil.
La documentation mentionnée se lit comme suit:
Le module de site (qui est importé automatiquement au démarrage, sauf si l'option de ligne de commande -S est donnée) ajoute plusieurs constantes à l'espace de noms intégré. Ils sont utiles pour l'interpréteur interactif et ne doivent pas être utilisés dans les programmes .
Ensuite:
exit (code = Aucun)
Objets qui, une fois imprimés, impriment un message comme «Utilisez quit () ou Ctrl-D (c'est-à-dire EOF) pour quitter», et lorsqu'ils sont appelés, déclenchez SystemExit avec le code de sortie spécifié.
Si nous le comparons à la documentation sys.exit () , il utilise le même mécanisme qui déclenche une SystemExit
exception.
Si vous souhaitez utiliser de manière portable les codes de sortie POSIX standard , consultez leexitstatus
package 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 de sens que ceux attribués par l'auteur du script. La tradition Unix est que le code de sortie 0 signifie «succès», tout le reste est un échec. La seule façon d'être sûr de la signification des codes de sortie pour un script donné est d'examiner le script lui-même.
Suivant les codes de sortie Unix 0 - pour succès / OK, 1 - non succès / erreur. Vous pouvez simplement utiliser exit(0)
ou exit(1)
appeler sans importer de sys
module.
Pour permettre aux gestionnaires d'exceptions et à d'autres choses de s'exécuter, je recommande un arrêt net avec le exit(0)
module intégré plutôt que d'utiliser sys.exit()
ce qui met fin au processus brusquement.
SystemExit
semble être soulevé de toute façon.
os._exit
, les deux semblent augmenter SystemExit
.
sys.exit()
s'arrête proprement, tout comme exit()
. Ils font tous les deux la même chose: lever une SystemExit
exception. En fait, exit()
on entend les sessions interactives, et non pas des scripts, donc sur le plan conceptuel sys.exit()
est celui qui est indiqué. Vous pourriez être déroutant os._exit()
, c'est celui qui se termine brusquement.