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 :

Exécution d'un exe avec argument


Sujet :

Python

  1. #1
    Membre extrêmement actif
    Avatar de MarieKisSlaJoue
    Homme Profil pro
    Ingénieur Cloud
    Inscrit en
    Mai 2012
    Messages
    1 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Ingénieur Cloud
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 145
    Billets dans le blog
    20
    Par défaut Exécution d'un exe avec argument
    Bonjour,

    Voila j'ai un problème avec une petit script python.
    Je voudrai exécuter un .exe, mais je dois aussi lui passer plusieurs argument.
    Pour ça j'ai utilisé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     os.system("monProgramme.exe -model \"arg1\" -role \"arg2\" -operation \"arg3\"")
    puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    os.execl("monProgramme.exe", "-model \"arg1\" -role \"arg2\" -operation \"arg3\"")
    et enfin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     os.execv("monProgramme.exe", "-model \"arg1\" -role \"arg2\" -operation \"arg3\"")
    à chaque fois mon programme ce lance, mais sans prendre en compte les arguments.
    Si je lance depuis un batch les commande et donc arguments sont bon.

    Quelqu'un aurait il une idée de solution ?
    Ce post à été écrit par un panda
    Apollo 11 - AGC revue de code
    -- qwerty keybord

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    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 699
    Par défaut
    Salut,

    os.system prend une chaîne de caractères en arguments:
    La question se résume a comment construire une chaîne de caractères avec des bout qui seront littéraux et des bouts qui seront variables.

    A la console Python:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> var = '123'
    >>> s = "toto " + var + '_tutu'
    >>> print (s)
    Après vous pouvez utiliser un format "a la C":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> s = 'toto %s_tutu' % (var)
    Rien qui décoiffe: juste des notions de bases que vous pourriez apprendre par vous même en ouvrant un tuto...

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

  3. #3
    Membre extrêmement actif
    Avatar de MarieKisSlaJoue
    Homme Profil pro
    Ingénieur Cloud
    Inscrit en
    Mai 2012
    Messages
    1 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Ingénieur Cloud
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 145
    Billets dans le blog
    20
    Par défaut
    Je pense que j'ai du mal m'exprimer.

    dans mon exemple \"arg1\", ne désigne pas les paramètre que je passe à python mais bien déjà des chaine de caractère.
    Je remplace arg par des valeur à la con comme exemple pour être sur de mettre fait comprendre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     os.system("monProgramme.exe -model \"pandaModel\" -role \"master\" -operation \"master|.\conf\fichierconf.xml\"")
    Donc non justement il n'y à pas de bout variable dans mon script.

    Et même si je fous les string dans des variables ça ne résous pas mon problème. Ça rend le code à la limite plus clair, mais pour un script qui tien en une ligne c'est pas le plus important.
    Ce post à été écrit par un panda
    Apollo 11 - AGC revue de code
    -- qwerty keybord

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    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 699
    Par défaut
    Citation Envoyé par MarieKisSlaJoue Voir le message
    Je pense que j'ai du mal m'exprimer.
    Si vous ne dites pas ce que vous voulez, on en est réduit a deviner...
    Passez par la case console pour raconter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> s = "la chaine que j'aimerais construire"
    >>> print (s) # l'horreur que j'obtiens
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Salut,

    Et si tu essayes comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    import subprocess
     
    ...
     
        subprocess.Popen(["monProgramme.exe", "-model", "arg1", "-role", "arg2",
                            "-operation", "arg3"], universal_newlines=True, 
                            stdout=subprocess.PIPE))
    ça donne quoi ?

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    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 699
    Par défaut
    @VinsS
    Le sburk est dans le bout de la chaîne "master|.\conf\fichierconf.xml\" donnée dans le deuxième post.
    La solution sera "raw string".

    Utiliser os.system, Popen,... est anecdotique.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 305
    Par défaut
    Ben oui mais comme elle dit "Je remplace arg par des valeur à la con ..." je m'en suis tenu au premier post.

    Cela dit, je ne vois pas ce que peut-être ce "master|.\conf\fichierconf.xml\"

    Trop compliqué pour moi Windows ...

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    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 699
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Cela dit, je ne vois pas ce que peut-être ce "master|.\conf\fichierconf.xml\"
    ".\conf\fichierconf.xml" est un nom de fichier Windows.
    Après, c'est un soucis de \ dans un string literal.
    On le neutralise avec un raw string (le '\f').
    Mais ils sont aussi bien utiles pour écrire un pattern de regexp (i.e. pas que pour Windoze).
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre extrêmement actif
    Avatar de MarieKisSlaJoue
    Homme Profil pro
    Ingénieur Cloud
    Inscrit en
    Mai 2012
    Messages
    1 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Ingénieur Cloud
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 145
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    ".\conf\fichierconf.xml" est un nom de fichier Windows.
    Après, c'est un soucis de \ dans un string literal.
    On le neutralise avec un raw string (le '\f').
    à vrai dire j'ai pas eu besoin de neutraliser les '\f', j'avais pourtant fait '\\f' justement avant pour bien garder le chemin, mais un print me renvoyais bien la chaine normalement, donc je les ai enlever.

    Je vais essayer après un raw string quand même pour voir.
    Ce post à été écrit par un panda
    Apollo 11 - AGC revue de code
    -- qwerty keybord

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    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 699
    Par défaut
    Citation Envoyé par MarieKisSlaJoue Voir le message
    Je vais essayer après un raw string quand même pour voir.
    Pour travailler sur "comment construire une chaîne de caractères avec des trucs bizarres dedans", testez "a la console".

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

  11. #11
    Membre extrêmement actif
    Avatar de MarieKisSlaJoue
    Homme Profil pro
    Ingénieur Cloud
    Inscrit en
    Mai 2012
    Messages
    1 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Ingénieur Cloud
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 145
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Et si tu essayes comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    import subprocess
     
    ...
     
        subprocess.Popen(["monProgramme.exe", "-model", "arg1", "-role", "arg2",
                            "-operation", "arg3"], universal_newlines=True, 
                            stdout=subprocess.PIPE))
    ça donne quoi ?
    Bon j'ai quand même testé malgré ce que à dis wiztricks, et en effet cela ne change rien.

    Citation Envoyé par wiztricks Voir le message
    @VinsS
    Le sburk est dans le bout de la chaîne "master|.\conf\fichierconf.xml\" donnée dans le deuxième post.
    La solution sera "raw string".

    Utiliser os.system, Popen,... est anecdotique.
    - W
    j'ai rajouter un raw string à la déclaration de la variable qui contient l'argument avec le chemin. Mais ça n'a rien changé.

    Citation Envoyé par wiztricks Voir le message
    Pour travailler sur "comment construire une chaîne de caractères avec des trucs bizarres dedans", testez "a la console".

    - W
    Je fais des print pour voir la sortie des chaine de caractère et ils sont normaux.

    ça c'est quand je lance le programme python
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    M:\Program Files\Case\Cv2.2>programmePython.exe
    monProgramme.exe -model "MODEL" -role "ROLE" -operation "master|.\conf\fichierconf.xmll"
    et voila la sortie du ficher batch qui lance la même commande que le programme python dois lancé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    M:\Program Files\Case\Cv2.2>programmeBat.bat
    monProgramme.exe -model "MODEL" -role "ROLE" -operation "master|.\conf\fichierconf.xmll"
    Sauf que le bat lui lance correctement le programme avec tous les paramètres, le python lui non.
    Ce post à été écrit par un panda
    Apollo 11 - AGC revue de code
    -- qwerty keybord

  12. #12
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    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 699
    Par défaut
    Salut,

    C'est pourtant pas si complique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> s = r'monProgramme.exe -model "MODEL" -role "ROLE" -operation "master|.\conf\fichierconf.xmll"'
    >>> print (s)
    monProgramme.exe -model "MODEL" -role "ROLE" -operation "master|.\conf\fichierconf.xmll"
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Membre extrêmement actif
    Avatar de MarieKisSlaJoue
    Homme Profil pro
    Ingénieur Cloud
    Inscrit en
    Mai 2012
    Messages
    1 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Ingénieur Cloud
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 145
    Billets dans le blog
    20
    Par défaut
    Je ne vois pas ce que tu tente de prouver, c'est déjà la sortie que j'obtiens.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monProgramme.exe -model "MODEL" -role "ROLE" -operation "master|.\conf\fichierconf.xmll"
    Le soucie c'est que elle ne s'exécute pas bien (ou ne fait pas ce qu'elle devrai faire).
    Ce post à été écrit par un panda
    Apollo 11 - AGC revue de code
    -- qwerty keybord

  14. #14
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    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 699
    Par défaut
    Citation Envoyé par MarieKisSlaJoue Voir le message
    Sauf que le bat lui lance correctement le programme avec tous les paramètres, le python lui non.
    Ah ben, si le sujet est devenu "comment récupérer une chaîne de caractères passée en paramètre" d'un script Python et n'est plus comment "construire une chaîne de caractère" pour la passer a os.system".

    Ouvrir un autre sujet? Le dire "explicitement"? Montrer comment le programme récupère cette chaîne...

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

  15. #15
    Membre extrêmement actif
    Avatar de MarieKisSlaJoue
    Homme Profil pro
    Ingénieur Cloud
    Inscrit en
    Mai 2012
    Messages
    1 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Ingénieur Cloud
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 145
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Ah ben, si le sujet est devenu "comment récupérer une chaîne de caractères passée en paramètre" d'un script Python et n'est plus comment "construire une chaîne de caractère" pour la passer a os.system".

    Ouvrir un autre sujet? Le dire "explicitement"? Montrer comment le programme récupère cette chaîne...

    - W
    non la question n'as pas changé, j'ai un .bat qui exécute la commande avec les paramètre correctement.
    j'ai un .py qui exécute la commande mais pas avec les paramètres qu'il faut.

    Mais dans tous les cas les arguments sont passés à l'intérieur du script, dans le code !
    Ce post à été écrit par un panda
    Apollo 11 - AGC revue de code
    -- qwerty keybord

  16. #16
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    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 699
    Par défaut
    Si c'est clair pour vous tant mieux, mais pour moi c'est juste du charabia.

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

  17. #17
    Membre extrêmement actif
    Avatar de MarieKisSlaJoue
    Homme Profil pro
    Ingénieur Cloud
    Inscrit en
    Mai 2012
    Messages
    1 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Ingénieur Cloud
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 145
    Billets dans le blog
    20
    Par défaut
    j'avais bien compris que on était pas du tous sur la même longueur d'onde.

    ça c'est le .bat il marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SET MODEL=mod
    SET ROLE=master
    SET OPERATION="master|.\configs\conf.xml"
     
    START /W monProgramme.exe  -model %MODEL% -role %ROLE% -operation %OPERATION%
    ça c'est le .py il ne marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    model = "mod"
    role = "master"
    operation = r"master|.\configs\conf.xml"
    os.system("monProgramme.exe -model " + model + " -role " + role + " -operation " + operation)

    La je peux pas faire plus clair.
    Ce post à été écrit par un panda
    Apollo 11 - AGC revue de code
    -- qwerty keybord

  18. #18
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    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 699
    Par défaut
    Super!

    Maintenant, on peut bosser a votre place!

    Que sort le .BAT:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >set MODEL=mod
    >set ROLE=master
    >set OPERATION="master|.\configs\conf.xml"
    >echo -model %MODEL% -role %ROLE% -operation %OPERATION%
    -model mod -role master -operation "master|.\configs\conf.xml"
    Que sort le Python:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> model = "mod"
    >>> role = "master"
    >>> operation = r"master|.\configs\conf.xml"
    >>> print ("-model " + model + " -role " + role + " -operation " +  operation)
    -model mod -role master -operation master|.\configs\conf.xml
    Si vos yeux ne voient pas de différence, consultez d'urgence un opthtalmo.

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

  19. #19
    Membre extrêmement actif
    Avatar de MarieKisSlaJoue
    Homme Profil pro
    Ingénieur Cloud
    Inscrit en
    Mai 2012
    Messages
    1 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Ingénieur Cloud
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 145
    Billets dans le blog
    20
    Par défaut
    Au oui tien, je n'avais jamais tenté de jouer sur les guillemets.


    Hier 11h45 la sortie python
    Citation Envoyé par MarieKisSlaJoue Voir le message
    Je ne vois pas ce que tu tente de prouver, c'est déjà la sortie que j'obtiens.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monProgramme.exe -model "MODEL" -role "ROLE" -operation "master|.\conf\fichierconf.xmll"
    Le soucie c'est que elle ne s'exécute pas bien (ou ne fait pas ce qu'elle devrai faire).
    Ce post à été écrit par un panda
    Apollo 11 - AGC revue de code
    -- qwerty keybord

  20. #20
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    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 699
    Par défaut
    Citation Envoyé par MarieKisSlaJoue Voir le message
    Au oui tien, je n'avais jamais tenté de jouer sur les guillemets.
    Vous avez pris le temps de montrer ce que font le .BAT et .py.
    Les chaînes de caractères construites sont manifestement différentes.
    Ca ne fera pas la même chose<point barre>.

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

Discussions similaires

  1. Gros projets et pas le temps : Executer un .exe avec argument.
    Par yoann34 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 07/09/2012, 17h43
  2. Erreur lancement .exe avec argument : clr20r3
    Par TomDuBouchon dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/08/2009, 16h16
  3. Exécuter un .exe avec java
    Par chebmo1986 dans le forum Langage
    Réponses: 1
    Dernier message: 29/04/2009, 17h05
  4. Exécuter un .exe avec des paramètres
    Par Coussati dans le forum Débuter
    Réponses: 8
    Dernier message: 01/02/2009, 20h26
  5. Réponses: 9
    Dernier message: 30/08/2006, 13h51

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