Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Général Python
Général Python Forum d'entraide sur les fondamentaux du langage Python, syntaxe, POO, bibliothèque standard, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 05/01/2013, 00h02   #1
durium
Invité régulier
 
Inscription : juin 2011
Messages : 24
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 24
Points : 8
Points : 8
Par défaut Lancer des lignes de commandes !

Bonjour à tous !

Je cherche à lancer des lignes de commandes en python. Deux pour être exact.

La première consiste en un simple cd directory.
La seconde est une ligne de commande permettant de compiler du C# donc du type :

Code :
csc /out: Main.exe /reference:System.dll Main.cs
Jusque la j'ai utilisé : os.system(command)

Mais je me suis vite rendu compte que les commandes sont lancées à chaque fois dans une nouvelle fenêtre qui se ferme automatiquement.


Mes questions sont donc les suivantes :
  1. Comment lancer les commandes que je veux (quelle class) ?
  2. Si possible un exemple
  3. Comment récuperer l'output ?


merci d'avance !
durium est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 09h33   #2
tyrtamos
Expert Confirmé
 
Avatar de tyrtamos
 
Inscription : décembre 2007
Messages : 1 777
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 1 777
Points : 3 049
Points : 3 049
Bonjour,

Voilà juste un petit exemple sous Windows:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import division
# Python 2.7
 
import sys, os
import subprocess
 
commande = ["dir", "test.txt"]
try:
    out, err = subprocess.Popen(commande, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True).communicate()
    print "stdout=", out.decode('cp850')
    print "stderr=", err.decode('cp850')
except (ValueError, OSError) as e:
    print ("Erreur: %s" % (e,)).decode('cp850')
NB: le "decode('cp850')" est là parce que la console DOS de Windows a l'encodage 'cp850' et que je voulais afficher en unicode.
__________________
Ne rien ranger permet d'observer la loi universelle d'entropie: l'inévitable convergence vers le chaos...
Mes recettes python: http://www.jpvweb.com
tyrtamos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 10h10   #3
plxpy
Membre émérite
 
Avatar de plxpy
 
Homme
Ingénieur
Inscription : janvier 2009
Messages : 494
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

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

Informations forums :
Inscription : janvier 2009
Messages : 494
Points : 893
Points : 893
Achtung !

changer de réperoire via os.system('cd ...') ou même (j'ai pas fait l'essai mais j'en suis quasiment sur) via subprocess ne sert à rien !

Le changement est effectué dans un ... sous-process et, à l'instruction suivante, on n'a pas bougé d'un iota :

Code :
1
2
3
4
5
6
7
8
9
>>> import os
>>> 
>>> os.getcwd()
'/home/plx'
>>> os.system('cd Bureau')
0
>>> os.getcwd()
'/home/plx'
>>>
Je l'ai fait sous Linux (pour pas rebooter) mais, sous Windows, je suis là aussi presque sur que c'est du même tonneau.

Donc, os.chdir !

ou alors ça (c'est l'idée qui est à retenir)

Code :
1
2
3
4
5
6
7
8
>>> os.getcwd()
'/home/plx'
>>> 
>>> os.system('cd Bureau; pwd')
/home/plx/Bureau
0
>>> os.getcwd()
'/home/plx'
Là c'est dans le même sous-process que les 2 commandes sont exécutées l'une à la suite de l'autre.
plxpy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 14h01   #4
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 710
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 710
Points : 4 547
Points : 4 547
Salut,

Une séquence de commandes shell/bash peut être lancée et controlée depuis Python en dialoguant via des pipes avec la chose créée par subprocess.Popen.
Il y a de bons exemples dans les tutos de D.Hellman.

Si vous voulez vous servir de Python comme lanceur de scripts bash ou autres, pourquoi ne pas regarder ce que font ipython, fabric ou autres?

- W
__________________
Architectures Post-Modernes
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 02h03.


 
 
 
 
Partenaires

Hébergement Web