IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Récupération de code de retour sys.exit(CODE_ERREUR) en Shell


Sujet :

Python

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 6
    Points : 9
    Points
    9
    Par défaut Récupération de code de retour sys.exit(CODE_ERREUR) en Shell
    Bonjour,

    Je dois appeler une suite de commandes python en SHELL UNIX et à chaque fois récupérer le code de retour de la commande Python.

    Le problème est que pour appeler chaque commande python je dois utiliser l'interpréteur python (python 2.6.1).

    Par exemple :

    python la_commande.py
    # Affichage du code de retour de la dernière comande SHELL exécutée
    echo $?

    Si la_commande.py sort avec un sys.exit(1) par exemple, il semble que l'interpréteur python n'exporte pas le code de retour de la_commande.py car j'ai toujours 0 en résultat de code de retour de la dernière commande SHELL.

    Connaissez vous un moyen pour retrouver le code sys.exit(CODE_ERREUR) retourné par la commande python de puis le SHELL Unix ?

    Merci
    Clousot

  2. #2
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> import subprocess
    >>> proc = subprocess.Popen('/bin/false')
    >>> proc.wait()
    1
    tout simplement.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par clousot Voir le message
    Si la_commande.py sort avec un sys.exit(1) par exemple, il semble que l'interpréteur python n'exporte pas le code de retour de la_commande.py car j'ai toujours 0 en résultat de code de retour de la dernière commande SHELL.
    Si tel était le cas, "çà se saurait" et ce serait un bug... qui aurait été corrigé dès les beta releases.... car c'est quand même important qu'une telle interface fonctionne. Le suspect le plus programme est votre programme. En tous cas, pas si difficile de tester:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ python -c "exit(12)"
    $ echo $?
    12
    pour s'assurer que Python fait son job.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Futur Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 6
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup pour votre aide.
    En effet le problème vient des commandes python que mon script SHELL doit exécuter.

    Chacune des commandes écrites en python sont instrumentées pour utiliser le module trace.py afin de produire un suivi de la couverture de code python exécuté.
    https://docs.python.org/2/library/trace.html

    En gros le main() de chaque commande est appelé par la méthode run() de l'objet tracer. Hors la méthode en question ne retourne pas le code d'erreur... C'est pourquoi j'ai toujours 0 en retour dans le SHELL. Donc à moins de rater quelque chose dans la documentation, je comprends que j'ai le choix entre couverture de code ou code de retour mais pas les deux à la fois :/ ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import sys
    import trace
     
    # create a Trace object, telling it what to ignore, and whether to
    # do tracing or line-counting or both.
    tracer = trace.Trace(
        ignoredirs=[sys.prefix, sys.exec_prefix],
        trace=0,
        count=1)
     
    # run the new command using the given tracer
    tracer.run('main()')
     
    # make a report, placing output in the current directory
    r = tracer.results()
    r.write_results(show_missing=True, coverdir=".")
    Merci encore...

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 6
    Points : 9
    Points
    9
    Par défaut
    J'allais oublier de préciser que ma solution consiste à utiliser dans mon code: tracer.runfunc(main) plutôt que tracer.run('main()') afin de bien propager le code de retour de mon main... Ce qui me permet de clore ma question.

    Merci encore pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupération du code retour d'un job dans un REXX
    Par zosuser dans le forum JCL - SORT
    Réponses: 4
    Dernier message: 31/10/2014, 14h32
  2. [batch] Récupération du code retour d'une commande
    Par fenrys_1 dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 06/03/2009, 18h05
  3. Récupération du code retour dans ssh
    Par Bruno51 dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 10/04/2008, 13h00
  4. Execution programme et récupération du code retour
    Par Dr_GonZO dans le forum Langage
    Réponses: 5
    Dernier message: 12/07/2005, 15h20
  5. Soucis de récupération de code
    Par sheira dans le forum ASP
    Réponses: 16
    Dernier message: 06/12/2004, 11h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo