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 :

Executer MsDos avec fenêtre invisible


Sujet :

Python

  1. #1
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Points : 1 266
    Points
    1 266
    Par défaut Executer MsDos avec fenêtre invisible
    Bonjour,

    Après le VBA, quelques notions VB.Net et MsDos, je me lance dans le Python.
    J'aimerais executer une commande MsDos mais en laissant la fenêtre invisible et être sur qu'elle se ferme en fin de processus avant de poursuivre mon code Python.
    Pour le moment, voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # Variable à inclure pour l'appel d'ogr2ogr de FwTools
            ogrstring='-skipfailures "'+ShapeFileTemp+'" "gltp:/vrf/'+FolderLib+'" tileref@tileref(*)_area'
            # Chaine pour l'appel de MsDos
            # /C : ouvre MsDos, execute le Bath et referme MsDos
            # /K : ouvre MsDos, execute le Bath et laisse ouvert MsDos
            callstring = '"C:\\WINDOWS\\system32\\cmd.exe /C" "C:\\Program Files\\FWTools2.4.7\\bin\\ogr2ogr.exe" ' + ogrstring
    # Execution de MsDos
            os.system(callstring)
    A priori, d'après mes recherches, il semblerait que "subprocess" soit la solution, mais je n'arrive pas à le mettre en oeuvre.

    Merci de bien vouloir m'aider.

    Cordialement

    Christophe
    Cordialement

    Christophe

    N'oubliez pas de mettre pour en faire profiter tout le monde.

  2. #2
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Vous avez des exemples en fin de doc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import subprocess
    import os
     
    commande = 'dir'
    args = '/s'
    p = subprocessPopen([commande, args]) #Execute la [commande]
    sts = os.waitpid(p.pid, 0)[1] #Attend le code retour
    @+
    Merci d'utiliser le forum pour les questions techniques.

  3. #3
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Points : 1 266
    Points
    1 266
    Par défaut
    Bonjour,

    Merci beaucoup de m'aider dans ma démarche.
    Toutefois, je n'arrive toujours pas à executer ce code.
    Donc, si j'ai bien repéré l'exemple du lien que tu m'as donné, nous avons :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sts = os.system("mycmd" + " myarg")
    ==>
    p = Popen("mycmd" + " myarg", shell=True)
    sts = os.waitpid(p.pid, 0)[1]
    Ce qui pour moi devrait, si j'ai bien compris, se traduire par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    p=subprocess.Popen(callstring,shell=True)
    sts=os.waitpid(p.pid,0)[1]
    Je suis, également, tombé par hasard sur subprocess.call
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    subprocess.call(callstring,shell=True)
    Ce code fonctionne, mais j'aimerais savoir si Python attend que ce processus soit terminé avant de continuer le script ?
    Dans le doute, j'ai tenté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    p=subprocess.call(callstring,shell=True)
    sts=os.waitpid(p.pid,0)[1]
    Mais j'ai un message qui me dit : 'int' object has no attribute 'pid'

    Merci d'éclairer ma lanterne, car le pauvre débutant que je suis manque de pétrole

    Cordialement

    Christophe
    Cordialement

    Christophe

    N'oubliez pas de mettre pour en faire profiter tout le monde.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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
    hello,

    subprocess.call ets bloquant, c'est à dire qu'il attend la fin du processus. Du coup dans ton exemple p correspond en fait au code de retour (un entier) et non à une instance de Popen. Tu ne peux donc pas appeler la méthode wait dessus.

  5. #5
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Points : 1 266
    Points
    1 266
    Par défaut
    Bonjour,

    Merci beaucoup pour ces précisions.

    Du coup c'est exactement ce qu'il me faut car la suite de mon code est fonction de ce va créer ma commande dos.

    Encore merci et à bientôt.

    Cordialement

    Christophe
    Cordialement

    Christophe

    N'oubliez pas de mettre pour en faire profiter tout le monde.

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

Discussions similaires

  1. [PHP 5.3] effacer la fenêtre MSdos avec php
    Par stefano dans le forum Langage
    Réponses: 4
    Dernier message: 04/12/2011, 11h53
  2. Executer Batch MsDos avec variables
    Par marsouin_89 dans le forum Général Python
    Réponses: 1
    Dernier message: 02/10/2011, 23h27
  3. Réponses: 2
    Dernier message: 23/05/2006, 02h40
  4. execution, threads et fenêtre active
    Par inertia dans le forum MFC
    Réponses: 2
    Dernier message: 26/05/2005, 11h05
  5. Exécutable Java avec JRE intégré
    Par clawhammer dans le forum JBuilder
    Réponses: 2
    Dernier message: 06/10/2003, 16h26

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