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.
Version imprimable
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.
Code:
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()
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.
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
Pour bien apprendre Python suis ces tutoriels et cours de formation Python : http://python.developpez.com/cours/Code:
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()
Sans oublier le meilleur cours gratuit Python : Apprendre � programmer avec Python 3 par G�rard Swinnen http://python.developpez.com/cours/apprendre-python3/
Merci beaucoup pour les pr�cisions. Cela marche tr�s bien. :king:
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 :
progLance.py marche bien tout seul mais lorsque je l'apppele via progLancantCommande.py, l� cela ne marche plus.Code:
1
2
3 progLancantCommande.py dossierA |____ progLance.py
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 ?
1) "progLancantCommande.py" est le script contenant les op�rations avec subprocess ? Si oui, alors dans
As-tu mis l� o� il y a "mon_programme.py", un chemin pour y parvenir, genre "./A/progLance.py" ?Code:x = subprocess.Popen(["python.exe", "mon_programme.py"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
2) oui
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 :
Je pense finalement qu'il faudrait que je donne le chemin complet du fichier � cr�er. Je teste et dis si cela fonctionne.Code:
1
2
3 file = open('__init__.py', 'w') file.write(text__init__py) file.close()
Ahhh... en fait c'est assez simple, admettons l'arborescence suivante:
sachant que file1.py lance file2.pyCode:
1
2
3
4
5 Dossier1 +-Dossier2 | +-file2.py | +-file1.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�.
C'est bien ce que je pensais. C'est logique... :calim2: quand on a compris. :lol:
Il faut faire l'appel comme suit :
Code:
1
2
3
4 os.chdir(os.path.dirname(pathOfThePythonFile)) x = subprocess.Popen(["python.exe", pathOfThePythonFile], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
Voici le code auquel je suis arriv� gr�ce � ce post. Merci les gars ! :ccool:
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.Code:
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] +'"' )
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.
Si tu travailles sous *nix, tu seras peut-�tre int�ress� par ce petit bout de code ;)
Tu peux remplacer les 4 ? par une *.Code:
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']
Un ? signifie "un caract�re au hasard", et une * signifie "une chaine de caract�re au hasard".
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�.
Merci guigui, et pour ceux que cela int�ressent aussi voir ici la doc. officielle.