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�cuter un script et r�cup�rer la sortie de la console Python


Sujet :

Python

  1. #1
    Membre �prouv�

    Profil pro
    Account Manager
    Inscrit en
    D�cembre 2006
    Messages
    2 301
    D�tails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Account Manager

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 2 301
    Par d�faut Ex�cuter un script Python avec la sortie console [PB si les dossiers sont diff�rents]
    Bonjour,
    je souhaiterais lancer un script Python puis r�cup�rer toutes les infos qui appra�traient dans la console Python y compris en cas d'erreur.

    Quelqu'un a-t-il une solution ? un cours Python ?

    Toute info est la bienvenue.

  2. #2
    Membre habitu�
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    16
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 16
    Par d�faut et voil�
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    import subprocess  
    x = subprocess.Popen(["ls", "-l"],stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    print "code retour:",x.wait()
    print "sortie standard"
    print x.stdout.read()
    print "erreurs"
    print x.stderr.read()

  3. #3
    Membre �prouv�

    Profil pro
    Account Manager
    Inscrit en
    D�cembre 2006
    Messages
    2 301
    D�tails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Account Manager

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 2 301
    Par d�faut
    Salut,
    il me manque des infos. Comment lancer un fichier Python ? O� met-on le chemin du dit fichier ?

    Peut-�tre faut-il que je pr�cise que je veux lancer un fichier A � tester � partir d'un fichier B. Ce sont les commandes � mettre dans le fichier B qui v�rifie le fichier A qui m'int�ressent.

  4. #4
    Membre habitu�
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    16
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 16
    Par d�faut
    Je ne sais pas si ca ca r�pond, mais voici comment tu peux recuperer les sorties d'erreur et les sorties standard de ton programme python.
    Bien sur, il faut remplacer python.exe et mon_programme.py par les chemins complets ou relatif de l'executable python et de ton programme

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    import subprocess  
    x = subprocess.Popen(["python.exe", "mon_programme.py"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    print "code retour:",x.wait()
    print "sortie standard"
    print x.stdout.read()
    print "erreurs"
    print x.stderr.read()
    Pour bien apprendre Python suis ces tutoriels et cours de formation Python : http://python.developpez.com/cours/
    Sans oublier le meilleur cours gratuit Python : Apprendre � programmer avec Python 3 par G�rard Swinnen http://python.developpez.com/cours/apprendre-python3/

  5. #5
    Membre �prouv�

    Profil pro
    Account Manager
    Inscrit en
    D�cembre 2006
    Messages
    2 301
    D�tails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Account Manager

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 2 301
    Par d�faut
    Merci beaucoup pour les pr�cisions. Cela marche tr�s bien.

  6. #6
    Membre �prouv�

    Profil pro
    Account Manager
    Inscrit en
    D�cembre 2006
    Messages
    2 301
    D�tails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Account Manager

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 2 301
    Par d�faut
    Bonjour,
    je relance ce post car j'ai voulu aujourd'hui utiliser la commande ci-dessus dans le cas de scripts contenus dans des dossiers diff�rents et l� cela ne marche pas.

    Concr�tement voici ce que j'ai :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    	progLancantCommande.py
    	dossierA
    	   |____ progLance.py
    progLance.py marche bien tout seul mais lorsque je l'apppele via progLancantCommande.py, l� cela ne marche plus.

    Il faut savoir que dans progLance.py je travaille avec des lectures/�critures de fichiers. De plus, je ne peux pas faire d'importation de progLance.py pour des raisons propres au d�veloppement de mon projet.

    Autre question : dans la cas de versions diff�rentes de Python, comment peut-on forcer l'utilisation d'une version ? Faut-il mettre le chemin complet de l'EXE ?

  7. #7
    Membre �m�rite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par d�faut
    Citation Envoy� par rambc Voir le message

    progLance.py marche bien tout seul mais lorsque je l'apppele via progLancantCommande.py, l� cela ne marche plus.

    ...

    Autre question : dans la cas de versions diff�rentes de Python, comment peut-on forcer l'utilisation d'une version ? Faut-il mettre le chemin complet de l'EXE ?
    1) "progLancantCommande.py" est le script contenant les op�rations avec subprocess ? Si oui, alors dans
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    x = subprocess.Popen(["python.exe", "mon_programme.py"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    As-tu mis l� o� il y a "mon_programme.py", un chemin pour y parvenir, genre "./A/progLance.py" ?

    2) oui

  8. #8
    Membre �prouv�

    Profil pro
    Account Manager
    Inscrit en
    D�cembre 2006
    Messages
    2 301
    D�tails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Account Manager

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 2 301
    Par d�faut
    J'ai mal pos� ma question : j'ai bien les fichiers qui sont lanc�s mais par contre certains des fichiers normalement cr��s ne le sont pas au bon endroit. J'utilise des choses comme :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    file = open('__init__.py', 'w')
    file.write(text__init__py)
    file.close()
    Je pense finalement qu'il faudrait que je donne le chemin complet du fichier � cr�er. Je teste et dis si cela fonctionne.

  9. #9
    Membre �m�rite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

    Informations professionnelles :
    Activit� : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par d�faut
    Ahhh... en fait c'est assez simple, admettons l'arborescence suivante:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    Dossier1
    +-Dossier2
    |  +-file2.py
    |
    +-file1.py
    sachant que file1.py lance file2.py

    lorsque file1 lance file2, le r�pertoire courant de file2 ne sera pas /Dossier1/Dossier2, mais /Dossier1, c'est � dire le r�pertoire courant de file1.

    Une fonction du module os permet de changer le r�pertoire courant, donc dans file1, avant d'utiliser subprocess, changes le r�pertoire courant, et puis remet-le � son �tat d'origine une fois file2 execut�.

  10. #10
    Membre �prouv�

    Profil pro
    Account Manager
    Inscrit en
    D�cembre 2006
    Messages
    2 301
    D�tails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Account Manager

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 2 301
    Par d�faut
    C'est bien ce que je pensais. C'est logique... quand on a compris.

  11. #11
    Membre �prouv�

    Profil pro
    Account Manager
    Inscrit en
    D�cembre 2006
    Messages
    2 301
    D�tails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Account Manager

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 2 301
    Par d�faut
    Il faut faire l'appel comme suit :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    os.chdir(os.path.dirname(pathOfThePythonFile))
    x = subprocess.Popen(["python.exe", pathOfThePythonFile],
                          stdout=subprocess.PIPE,
                          stderr=subprocess.PIPE)

  12. #12
    Membre �prouv�

    Profil pro
    Account Manager
    Inscrit en
    D�cembre 2006
    Messages
    2 301
    D�tails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Account Manager

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 2 301
    Par d�faut
    Voici le code auquel je suis arriv� gr�ce � ce post. Merci les gars !
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    #!/usr/bin/env python
    #coding=utf-8
     
    import os 
    import glob
    import subprocess  
     
    def listBuilder(path, currentFile):
    # Take a look here for example :
    #       http://python.developpez.com/faq/?page=Fichier#ContenuRepertoire
        listDir =[]
        inTheDir = glob.glob(path + '\\*') 
     
        for oneThing in inTheDir: 
            if os.path.isdir(oneThing):
                listDir.extend(listBuilder(oneThing, currentFile))
            else:
                fileNameSplitted = os.path.basename(oneThing).split('.')
                if fileNameSplitted[0].startswith('tool_Builder_') and fileNameSplitted[1]=='py' and fileNameSplitted[0].find(' ')==-1 :
                    if oneThing <> currentFile:
                        if os.path.dirname(oneThing) not in listDir:
                            listDir.append(os.path.dirname(oneThing))
     
                        print '\n'*2 + '='*50 +'\n' + '='*50
                        print 'START - Execution of the following tool builder :'
                        print '\t' + os.path.basename(oneThing)
                        print '\t\t DIRECTORY : ' + str(os.path.dirname(oneThing))
                        print '\n' + '='*50 +'\n' + '='*50
     
    # Take a look here for example :
    #       http://www.developpez.net/forums/d659853/autres-langages/python-zope/general-python/executer-script-recuperer-sortie-console-python/
    #
    # We have to change the directory from Python's point of view.
                        os.chdir(os.path.dirname(oneThing))
                        x = subprocess.Popen(["python.exe", oneThing], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
                        print "code retour:",x.wait()
                        print "sortie standard"
                        print x.stdout.read()
     
                        errors = x.stderr.read()
                        if errors <> '':
                            print "errors"
                            print errors
     
        return listDir
     
     
    listDirFound = listBuilder(os.getcwd(), os.path.abspath( __file__ ))
            # os.path.abspath( __file__ ) gives the path of the current file.
            # Take a look here for example : 
            #    http://stackoverflow.com/questions/50499/in-python-how-do-i-get-the-path-and-name-of-the-file-that-is-currently-executing
     
    # We can open the directory for the user so as to make some changes.
    # Take a look here for example :
    #       http://www.developpez.net/forums/d695448/autres-langages/python-zope/general-python/ouvrir-faire-apparaitre-dossier/
    answer = raw_input("""Type O or o to open all the directories containing tool_Builder_----.py files.
    """)
     
    if answer in ['O', 'o']:
        for i in range(len(listDirFound)):
            os.system('explorer "' + listDirFound[i] +'"' )
    Gr�ce � ce code je peux chercher dans mon projet tous les fichiers ayant pour nom "tool_Builder_----.py" o� les tirets ne sont pas des espaces.
    J'utilise ce type de fichiers pour construire des scripts Python contenant des donn�es complexes, utiles � mon projet, lesquelles sont construites � partir de donn�es que je renseigne � la main de fa�on ais�e.

  13. #13
    Membre �m�rite
    Avatar de Antoine_935
    Profil pro
    D�veloppeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activit� : D�veloppeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par d�faut
    Si tu travailles sous *nix, tu seras peut-�tre int�ress� par ce petit bout de code

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    >>> from subprocess import Popen, PIPE
    >>> p = Popen('find -type f -name "tool_Builder_????.py"', shell=True, stdout=PIPE)
    >>> p.wait()
    0
    >>> dat = p.stdout.read()
    >>> dat[:-1].split('\n')
    ['./finder/tool_Builder_0233.py', './finder/fdg/tool_Builder_0233.py']
    Tu peux remplacer les 4 ? par une *.
    Un ? signifie "un caract�re au hasard", et une * signifie "une chaine de caract�re au hasard".

  14. #14
    Membre �prouv�

    Profil pro
    Account Manager
    Inscrit en
    D�cembre 2006
    Messages
    2 301
    D�tails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Account Manager

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 2 301
    Par d�faut
    Merci comme cela je pourrais faire quelque qui sera multi-os.

    Il faudrait juste que je retrouve comment tester si on est sous Windows ou Linux. J'ai cela quelque part mais je ne sais plus o�.

  15. #15
    Expert confirm�
    Avatar de Guigui_
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Ao�t 2002
    Messages
    1 864
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Sa�ne et Loire (Bourgogne)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Ao�t 2002
    Messages : 1 864

  16. #16
    Membre �prouv�

    Profil pro
    Account Manager
    Inscrit en
    D�cembre 2006
    Messages
    2 301
    D�tails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Account Manager

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 2 301
    Par d�faut
    Merci guigui, et pour ceux que cela int�ressent aussi voir ici la doc. officielle.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 10
    Dernier message: 14/07/2009, 18h39
  2. R�ponses: 9
    Dernier message: 18/07/2007, 12h04
  3. R�ponses: 7
    Dernier message: 05/04/2007, 16h15
  4. Ex�cuter un script, redirection entr�e-sortie
    Par darkrio dans le forum Langage
    R�ponses: 9
    Dernier message: 30/03/2007, 14h53
  5. R�ponses: 5
    Dernier message: 16/03/2007, 12h16

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