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 :

Lancement d'un programme externe


Sujet :

Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Lancement d'un programme externe
    Bonjour,

    J'aurais besoin d'aide pour le lancement d'un programme externe. Jusqu'à maintenant j'arrive à lancer mon programme externe à l'aide de la commande:
    os.system('...')
    Je voudrais pouvoir lancer maintenant ce programme en tache de fond, voir que plus aucune fenêtre ne s'affiche. J'utilise ce programme dans une boucle donc il y a beaucoup d'apparitions de la fenêtre dos ou est lancé le programme.
    J'ai essayé d'utiliser la commande os.system('nom du programme>nom d'un fichier ou lancer le programme &') mais avec cette commande la main reviens tout de suite à python sans attendre que le programme externe finisse. Donc du coup mon programme plante...

    Si quelqu'un peut m'aider...
    Merci d'avance pour vos réponses.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    bonjour,

    un peu de lecture

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://docs.python.org/library/subprocess.html

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci pour votre réponse.Désolé mais j'ai déjà passé passé plus de 2H sur cette doc sans trouver mon bonheur...surtout que je suis pas très fort en anglais...
    Serait-il possible d'avoir un peu plus d'explications? Il me faudrait juste une piste.
    Merci d'avance.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    ok,

    voilà un exemple que j'utilise dans un de mes scripts:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    run = subprocess.Popen(args=["bzr","tags","-r","-1"],stdout=subprocess.PIPE)
    lines = run.stdout.readlines()
    run.wait()
    dans l'argument args, je donne une liste qui correspond à la commande que je veux exécuter. Ici c'est:

    donc le premier élément de args est en fait la commande elle même et les éléments suivants sont des arguments.

    l'argument stdout=subprocess.PIPE me permet de dire où la sortie console va être "écrite". J'utilise ici une sorte de fichier interne fourni par le module subprocess (en l'occurrence subprocess.PIPE).

    je réalise la lecture de toutes les lignes de ce fichier avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lines = run.stdout.readlines()
    et enfin je spécifie à mon script qu'il ne doit pas aller plus loin tant que l'opération n'est pas terminée:

    P.S.: pour les utilisateurs de bazaar qui verraient mon code, s'il y a une meilleure façon de faire en passant par l'API de bazaar je suis prenneur, j'ai jamais vraiment pris la peine de me documenter sur cette API (je sais que c'est mal )

    P.P.S.: pour les gens qui cherchent un outil de gestion de conf, hésitez pas à essayer bazaar

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup pour cette réponse et du temps que vous m'accordez.

    J'aimerais savoir sur quels paramètres agissent "-1" et "-r"?
    Une autre question, est ce que pour vous la fenêtre du programme ne s'ouvre pas? Moi elle apparait toujours à l'écran. La fenêtre ouverte pas le lancement de mon programme et une fenêtre cmd ou le déroulement du programme est inscrit. Maintenant avec votre script la fenêtre est la mais elle reste noir (plus d'inscriptions qui défilent). Et il ya toujours une fenêtre qui s'ouvre a chaque itération de ma boucle ce que je voudrais absolument supprimer.J'aimerais que le programme travail sans m'ouvrir de fenêtre.

    Merci encore pour vos réponses

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    je ne travaille pas sur windows, du coup je n'ai pas le soucis avec ces fenêtres qui apparaissent.

    ensuite:

    est un exemple spécifique à mon utilisation ce ne sont en aucun cas des options de subprocess, du coup -r -1 sont relatifs à la commande bzr tags.

    j'aurais peut être dû montrer cet exemple (plus parlant si tu connais Linux/Unix):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    run = subprocess.Popen(args=["ls","-l"],stdout=subprocess.PIPE)
    qui est l'"équivalent" de:

    edit: as tu essayé de renommer ton script .py en .pyw pour cacher la console qui apparait ?

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Si j'ai bien compris le premier terme de args[] est le programme et les autres sont les arguments du programme en question?
    Sinon mon script est composé de plusieurs script, est ce qu'il faut que je change toutes mes extensions ou seulement celle de mon programme "main"?

  8. #8
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    Citation Envoyé par nico63 Voir le message
    Si j'ai bien compris le premier terme de args[] est le programme et les autres sont les arguments du programme en question?
    c'est exactement ça. il y a une autre façon de faire avec Popen mais celle ci fonctionne très bien

    Citation Envoyé par nico63 Voir le message
    Sinon mon script est composé de plusieurs script, est ce qu'il faut que je change toutes mes extensions ou seulement celle de mon programme "main"?
    je maitrise pas des masses, je dirais juste celui du script principal

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Malheuresement le changement d'extension n'a rien changé... En faite je lance une fenêtre cmd à laquelle j'associe un fichier *.dgibi (fichier Cast3M) et c'est cette fenêtre que je voudrais fermée. Le problème viendrait pas du faite que je lui demande de l'ouvrir dans la commande run = subprocess.Popen(args=["C:/Cast3M/PCW_09/bin/castem09.bat","C:/Users/Boy/Desktop/Python/Stratifie_variable/Composite_stratifie_2.dgibi"],stdout=subprocess.PIPE)
    ? Car le programme Cast3M utilise une fenêtre cmd pour calculer.

  10. #10
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Points : 970
    Points
    970
    Par défaut
    je comprends. je ne sais pas si c'est faisable de cacher cette fenêtre depuis python.

    j'ai trouvé un autre message qui parle du même problème:

    http://www.developpez.net/forums/d60...ole-processus/

    mais malheureusement pas de solution

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup pour le lien je pense que je vais creuser dans cette direction. Si je trouve je mettrai un post pour expliquer.
    Encore merci.

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    J'ai trouvé une solution qui me convient mais surement pas pour tout le monde!
    Jusqu'à maintenant je lancer mon programme "main" dans l'IDLE et j'avais ce problème d'affichage de fenêtres.
    Avec la commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    run = subprocess.Popen(args=["bzr","tags","-r","-1"],stdout=subprocess.PIPE)
    lines = run.stdout.readlines()
    run.wait
    ET[/B] le lancement du main par le *.py et non par l'IDLE (c'est à dire en double cliquant sur l'icône du script) le problème est résolu. Pourquoi je ne sais pas mais dans mon cas ça marche! Ca vient surement du fait que par cette méthode le script est lancé dans une console. Mais je peux dire une bêtise...

    Edité par Guigui_: merci d'utiliser les balises [Code] (le #)

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

Discussions similaires

  1. [Débutant] Lancement d'un programme externe.
    Par trysh53 dans le forum VB.NET
    Réponses: 3
    Dernier message: 17/02/2012, 11h26
  2. Réponses: 3
    Dernier message: 07/12/2006, 16h13
  3. Réponses: 2
    Dernier message: 12/07/2006, 08h44
  4. [Linux] Problème de lancement d'un programme externe
    Par kitsune dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 17/05/2006, 18h40
  5. Lancement d'un programme externe
    Par vinzzzz dans le forum Windows
    Réponses: 1
    Dernier message: 05/05/2006, 14h19

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