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 :

Utiliser un executable avec arguments en inputs


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 23
    Par défaut Utiliser un executable avec arguments en inputs
    Bonjour à tous!

    Je souhaite executer un executable avec Python 3.9.
    Mon executable s'appelle MARCY.exe.

    Avec la commande suivante, l'executable s'ouvre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    subprocess.run(["MARCY.exe"], capture_output=True, text=True)
    voici ce que l'executable retourne:

    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
    17
    18
    19
    20
     Please select, 0: Do not overwrite output files, 1: Overwrite output files:
     
    stderr: forrtl: The pipe has been ended.
     
    forrtl: severe (24): end-of-file during read, unit -4, file CONIN$
     
    Image              PC        Routine            Line        Source             
    MARCY.exe          010AA670  Unknown               Unknown  Unknown
    MARCY.exe          01070836  Unknown               Unknown  Unknown
    MARCY.exe          0105DDA2  Unknown               Unknown  Unknown
    MARCY.exe          0105D0E4  Unknown               Unknown  Unknown
    MARCY.exe          01043B10  Unknown               Unknown  Unknown
    MARCY.exe          00FEC8E1  Unknown               Unknown  Unknown
    MARCY.exe          01021F55  Unknown               Unknown  Unknown
    MARCY.exe          00FECDFE  Unknown               Unknown  Unknown
    MARCY.exe          010AF583  Unknown               Unknown  Unknown
    MARCY.exe          01093848  Unknown               Unknown  Unknown
    KERNEL32.DLL       76C56359  Unknown               Unknown  Unknown
    ntdll.dll          77E987A4  Unknown               Unknown  Unknown
    ntdll.dll          77E98774  Unknown               Unknown  Unknown
    En gros, la premiere ligne est normale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Please select, 0: Do not overwrite output files, 1: Overwrite output files:
    et à ce moment, je suis censé entrer des arguments pour que le code se lance. Mais je n'arrive pas à fournir ces données. Typiquement, je dois rentrer les arguments suivants pour lancer mon calcul:
    0
    #
    0


    J'ai essayé les configurations suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    subprocess.run(["MARCY.exe", "0", '#', '0'], capture_output=True, text=True)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    subprocess.run(["MARCY.exe"], input='0 # 0', capture_output=True, text=True)
    Aucune de ces configurations ne change quoique ce soit.

    Avez vous des conseils?

    Merci!

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 207
    Par défaut
    hello,
    voici un exemple pour envoyer des chaînes sur l'entrée standard d'un processus lancé à partir de python :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import subprocessproc = subprocess.Popen('cmd.exe',stdin=subprocess.PIPE)
    proc.stdin.write(b"cd ..\n")
    proc.stdin.write(b"cd\n")
    proc.stdin.flush()
    time.sleep(1)
    input("press return")
    proc.stdin.write(b"cd\n")
    proc.stdin.flush()
    proc.stdin.close()
    proc.wait()
    ami calmant, J.P

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Si c'est ton exécutable tu ne peux pas faire en sorte de saisir ces arguments dans la console ?

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 23
    Par défaut
    J. P. et LeNarvalo, merci de vos réponses.

    La méthode de J. P. ne marche pas dans mon cas: l'executable s'ouvre mais je n'arrive à donner aucun argument.

    Pour résoudre le problème, j'ai mis le Path vers l'executable dans un fichier .BAT, et je lance ce .BAT depuis Pyhon en utilisant .
    Pour ceux qui sont intéssés, voici ce qu'il y a dans mon .BAT (run.bat):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     (Echo 0&Echo #&Echo 0) | C:\Users\Desktop\MARCY\code\first_test\\MARCY.exe
    Cette ligne de code informe que l'executable MARCY.exe va recevoir en premier lieu l'argument "0", en second lieu "#" puis ensuite "0".

    J'appelle l'executable dans Python comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    os.startfile(workDir + "\\run.bat")

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par pascaloupsu Voir le message
    La méthode de J. P. ne marche pas dans mon cas: l'executable s'ouvre mais je n'arrive à donner aucun argument.
    Bizarre car chez-moi elle fonctionne parfaitement. C'est d'ailleurs exactement la même méthode (envoyer les valeurs via un pipe au programme) que celle que tu as codée en batch
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #!/usr/bin/env python3
    # coding: utf-8
     
    import subprocess
     
    proc=subprocess.Popen("bc", stdin=subprocess.PIPE)
    proc.stdin.write(b"2+3\n3*4\n")
    proc.stdin.write(b"4*5\n")

    Adapté à ton programme, ça serait
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/usr/bin/env python3
    # coding: utf-8
     
    import subprocess
    import os
    proc=subprocess.Popen(os.path.join("C:", "Users", "Desktop", "MARCY", "code", "first_test", "MARCY.exe"), stdin=subprocess.PIPE)
    proc.stdin.write(b"0\n#\n0\n")

    PS: je ne sais pas à quoi correspondent les options "capture_output" et "text" que je n'ai pas trouvées dans la doc

    Citation Envoyé par LeNarvalo Voir le message
    Si c'est ton exécutable tu ne peux pas faire en sorte de saisir ces arguments dans la console ?
    Mauvaise solution. Si tu as envie qu'un programme puisse lancer un exec en lui fournissant automatiquement les valeurs qu'il attend (voire éventuellement à dates fixes), c'est pour éviter de devoir rester devant ton ordi à attendre de devoir saisir les valeurs manuellement. Sinon Python ne sert plus à rien et autant lancer directement l'exec pour lui donner ensuite les valeurs quand il les demande.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. générer un executable avec argument
    Par boutimma dans le forum Prolog
    Réponses: 1
    Dernier message: 01/04/2010, 14h14
  2. lancer executable avec arguments
    Par Benoit_T dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 09/07/2009, 11h57
  3. Réponses: 18
    Dernier message: 03/07/2006, 15h53
  4. [API][Système] Executer une commande dos avec arguments
    Par oOoOuuhmAn dans le forum Général Java
    Réponses: 4
    Dernier message: 17/03/2006, 12h37
  5. [VisualC++]executable avec arguments
    Par Invité dans le forum MFC
    Réponses: 6
    Dernier message: 04/01/2006, 15h02

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