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 :

interaction Python-Bash avec $?


Sujet :

Python

  1. #1
    Membre habitué
    Inscrit en
    Mars 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 11
    Par défaut interaction Python-Bash avec $?
    Bonjour,
    j'ai 2 scripts python: test.py et test2.py, ce dernier étant appelé par test.py.

    voici test2.py:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #!/usr/bin/env python
    print "toto"
    voici test.py:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #!/usr/bin/env python
    import os
    cmd = "echo test...\n"
    cmd += "test2.py &> /dev/null\n"
    cmd += "if [ $? != 0 ]; then echo error; else echo ok; fi;\n"
    os.system( cmd )
    Donc, lorsque j'exécute test.py dans un shell, je m'attends à avoir:
    bash$ test.py
    test...
    ok
    bash$

    Or j'obtiens ça suivit de "toto", et le programme tourne toujours. Je dois faire un Ctrl+C pour récupérer le prompt...

    Pourquoi ?
    Y a-t-il un moyen d'éviter ça ?
    Pourquoi le "&>/dev/null" ne fonctionne pas ?
    Cela doit etre du à la façon dont Python gère le "os.system"...

    Merci de toute aide !

  2. #2
    Invité de passage
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1
    Par défaut
    Bonjour,
    Pour une fois, je peux répondre, mais ce n'est pas un problème python, mais sh.
    La deuxième ligne n'est pas claire. Cette commande exécute le programme test2.py en arrière plan, puis branche la sortie sur /dev/null (mais comme le programme est déjà lancé dans son sous-shell, ça ne sert pas à grand chose). D'où le comportement vu à savoir écriture de "test..." sur stdout, lancement en arrière plan de test2.py, avant la fin de son exécution, test de $? (qui est donc le code de sortie du echo de la première ligne...), puis sortie du programme test.py et retour au prompt, puis, enfin, sortie du sous shell de test2.py avec écriture de "toto" sur stdout puisque sa sortie standard à été redirigée trop tard.
    Soit le but est d'exécuter en arrière plan test2.py en redirigeant sa sortie sur /dev/ null, auquel cas on écrira
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >/dev/null ./test2.py &
    ou alors, il s'agit de rediriger stdout et stderr de test2.py sur /dev/null et dans ce cas la syntaxe est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./test2.py &>/dev/null # sans espace entre > et /dev et c'est du bash, pas du sh
    Je suppose que la deuxième version est la bonne, le programme correct serait donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
     
    import os
     
    cmd = '''echo test...\n'''
    cmd += '''./test2.py >/dev/null 2>&1\n''' # sh compatible...
    cmd += '''if [ $? -eq 0 ]; then echo "error" >&2; else echo "ok"; fi\n'''
    os.system(cmd)
    et on obtient bien la sortie attendue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    moi@moi retoursh $ ./test.py 
    test...
    ok
    moi@moi retoursh $

Discussions similaires

  1. Problème de configuration de PYPAR (python parallèle avec du MPI)
    Par salidev1 dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 13/05/2009, 19h09
  2. Réponses: 6
    Dernier message: 27/02/2009, 09h03
  3. [HTML] interaction du HTML avec le excel
    Par houwa dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 09/07/2008, 11h20
  4. probleme de récupération de variable en bash avec awk
    Par avogadro dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 24/12/2006, 01h31
  5. Interaction prog C avec Access
    Par richard_sraing dans le forum C
    Réponses: 5
    Dernier message: 27/05/2006, 20h10

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