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.
Pas sûr du tout. Sous Unix / Linux, la norme est: exit 0 dans le cas où tout allait bien. Tapez une commande, puis echo $?: Si vous lisez 0, elle est retournée sans erreur. L'idée est d'avoir des tests standards. Si le code xyz.py n'a rencontré aucune erreur, il DEVRAIT retourner 0!
Bruno von Paris
1
Si vous souhaitez modifier le code de sortie, préférez quitter proprement en utilisant la sortie intégrée, voir cette réponse
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:
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.
errno.h est généralement pour les codes de sortie d'appel de fonction. Les tentatives de normalisation des codes de sortie de programme ont entraîné la présence de /usr/include/sysexits.h sur la plupart des systèmes POSIX.
mpounsett
1
Il est très bon de savoir que "les programmes Unix utilisent généralement 2 pour les erreurs de syntaxe de ligne de commande"!
dantiston
2
@dantiston Concur. Un ardent défenseur de Gentoo teint dans la laine, mais je ne l'ai jamais su ... jusqu'à ce jour fatidique. ( Ma honte se termine maintenant. ) De manière similaire, notez que greprompt cette tendance en quittant avec 1quand aucune ligne ne correspond et 2sur les erreurs réelles. Merci beaucoup, Stallman.
Cecil Curry
32
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
Ceci est une erreur. Ces erreurs ne sont pas destinées à être utilisées comme codes de sortie de processus. Il s'agit de codes d'erreur de bas niveau destinés à être utilisés en interne dans les programmes, en particulier ceux écrits en langage C. Pour Python, utilisez des exceptions chaque fois que possible.
SvdB
2
Vous avez raison. Ceux-ci doivent être utilisés en interne. Mais vous ne déclenchez normalement pas d'exceptions au niveau de l'utilisateur final. Vous utilisez sys.exit (x) avec x étant un entier que vous choisissez arbitrairement. Mais vous pouvez utiliser ceux commençant par EX_ et définis dans le module 'os'. Comme os.EX_OK ou os.EX_IOERR
Oli
2
Désolé, mais je vote également contre, car c'est trompeur. Les codes d'état de sortie et les numéros d'erreur ne sont pas interchangeables / complémentaires. En utilisant l'exemple donné, «permission refusée» a un code d'erreur de 13 (selon errnoet errno.h ), mais un code d'état de sortie de 77 (selon oset 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.
Mark G.9
14
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.
Juste pour être complet, 'Pas OK' sera imprimé si le script Python a déclenché une erreur OU une erreur de syntaxe.
Shital Shah
5
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 .
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 SystemExitexception.
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.
Les codes de sortie dans de nombreux langages de programmation dépendent des programmeurs. Vous devez donc regarder le code source de votre programme (ou manuel). Zéro signifie généralement "tout s'est bien passé".
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 sysmodule.
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.
Alors, quelle est la différence? D'où viennent ces informations? Vous voulez dire l'exécution des gestionnaires "à la sortie" ou à quoi faites-vous allusion exactement? SystemExitsemble être soulevé de toute façon.
0xC0000022L
mm, je l'ai confondu avec os._exit, les deux semblent augmenter SystemExit.
vidstige
1
Mauvais: sys.exit()s'arrête proprement, tout comme exit(). Ils font tous les deux la même chose: lever une SystemExitexception. 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.
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.
la source
De la documentation pour
sys.exit
: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: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.la source
grep
rompt cette tendance en quittant avec1
quand aucune ligne ne correspond et2
sur les erreurs réelles. Merci beaucoup, Stallman.Pour mémoire, vous pouvez utiliser les codes de sortie standard POSIX définis ici .
Exemple:
la source
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 :
la source
errno
et errno.h ), mais un code d'état de sortie de 77 (selonos
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 source
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.
la source
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 .
la source
Je ne sais pas si c'est un bon conseil.
La documentation mentionnée se lit comme suit:
Ensuite:
Si nous le comparons à la documentation sys.exit () , il utilise le même mécanisme qui déclenche une
SystemExit
exception.la source
Si vous souhaitez utiliser de manière portable les codes de sortie POSIX standard , consultez le
exitstatus
package sur PyPI.Installez le package:
Utilisez dans votre code:
la source
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.
la source
Les codes de sortie dans de nombreux langages de programmation dépendent des programmeurs. Vous devez donc regarder le code source de votre programme (ou manuel). Zéro signifie généralement "tout s'est bien passé".
la source
Suivant les codes de sortie Unix 0 - pour succès / OK, 1 - non succès / erreur. Vous pouvez simplement utiliser
exit(0)
ouexit(1)
appeler sans importer desys
module.la source
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'utilisersys.exit()
ce qui met fin au processus brusquement.la source
SystemExit
semble être soulevé de toute façon.os._exit
, les deux semblent augmenterSystemExit
.sys.exit()
s'arrête proprement, tout commeexit()
. Ils font tous les deux la même chose: lever uneSystemExit
exception. En fait,exit()
on entend les sessions interactives, et non pas des scripts, donc sur le plan conceptuelsys.exit()
est celui qui est indiqué. Vous pourriez être déroutantos._exit()
, c'est celui qui se termine brusquement.