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 :

Problème avec subprocess.Popen


Sujet :

Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2
    Par défaut Problème avec subprocess.Popen
    Bonjour à tous,

    Essayant par tous les moyens de lancer un petit script faisant appel à la directive subprocess.Popen, je rencontre quelques difficultés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #!/usr/bin/env python
    import os, subprocess, sys, socket, time, struct, random, argparse...
     
    (...)
     
    Exe = os.path.join(os.path.join(os.environ["PERSO_HOME"], "bin"), "fichier")
    Config = os.path.join(os.getcwd(),fichier)
    GoProcess = subprocess.Popen("%s -c %s" % (Exe, Config), stdout=sys.stdout)
    En l'exécutant, je me retrouve avec une erreur bien étrange :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    # ./PRED.py -f 1 -p 1
    Traceback (most recent call last):
      File "./PRED.py", line 245, in <module>
        sumoProcess = subprocess.Popen("%s -c %s" % (Exe, Config), stdout=sys.stdout)
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 672, in __init__
        errread, errwrite)
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1202, in _execute_child
        raise child_exception
    OSError: [Errno 2] No such file or directory
    Ce script fonctionnait parfaitement lorsque j'étais sous Windows, et là depuis le changement sous Mac, ça me pond une erreur de fichier inexistant O_o.
    Pour info, Python est bien installé (dans sa version 2.7), les librairies sont bien incluses en début de script, et Exe / Config correspondent respectivement au chemin absolu vers l'exécutable que je souhaite lancer, et un fichier de paramètres. Les chemins existent bel et bien et les magouilles avec join() et la variable d'environnement utilisée fonctionnent bien également.

    Une idée ?

    Merci par avance !

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Par défaut
    Il faut certainement remplacer (en tt cas c'est le cas avec un linux)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GoProcess = subprocess.Popen("%s -c %s" % (Exe, Config), stdout=sys.stdout)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GoProcess = subprocess.Popen([Exe, '-c', Config], stdout=sys.stdout)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GoProcess = subprocess.Popen("%s -c %s" % (Exe, Config), stdout=sys.stdout, shell=True)
    La 1ère solution est plus sûre vu qu'elle réduit la possibilité de faire des injections.
    La 2nde plus flexible vu qu'on peut faire entre autres des pipes ...


    Remarque: en python, en général on respecte un certain nombre de règles de nommage, en particulier les noms de variables sont underscore_separated:
    Exe ==> exe
    Config ==> config
    GoProcess ==> go_process

  3. #3
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Citation Envoyé par ZZelle
    La 1ère solution est plus sûre vu qu'elle réduit la possibilité de faire des injections.
    des "injections" ???

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Par défaut
    Le 1er warning du lien :

    >>> from subprocess import call
    >>> filename = input("What file would you like to display?\n")
    What file would you like to display?
    non_existent; rm -rf / #
    >>> call("cat " + filename, shell=True) # Uh-oh. This will end badly

  5. #5
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Après la lecture, je comprends ce que ça veut dire. Mais, tu pourrais quand même faire un petit effort pour traduire au mieux les termes anglophones peu usités !

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 103
    Par défaut
    Citation Envoyé par plxpy Voir le message
    Après la lecture, je comprends ce que ça veut dire. Mais, tu pourrais quand même faire un petit effort pour traduire au mieux les termes anglophones peu usités !
    Sauf que le français d'injection c'est ... injection ...

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2
    Par défaut
    Merci beaucoup pour cette réponse claire et rapide ! problème résolu !

    Pour les notations de variables, je prend note . Le code est un poil sale, c'est pour une utilisation perso d'un simulateur O_o. J'ai eu en tous cas l'occasion de découvrir Python il y a peu, chouette langage !

    Merci encore, et bonne soirée

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

Discussions similaires

  1. problème avec subprocess.call() et l'AJAX
    Par alaninho dans le forum Réseau/Web
    Réponses: 0
    Dernier message: 12/09/2014, 10h49
  2. cacher le terminal avec subprocess.popen
    Par bender86 dans le forum Général Python
    Réponses: 1
    Dernier message: 29/08/2011, 18h05
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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