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 :

Utilisation de exec*() en python


Sujet :

Python

Vue hybride

chedu06 Utilisation de exec*() en... 20/04/2010, 15h58
kango bonsoir, tu cherches à... 20/04/2010, 23h22
ju_bicycle La réponse de Kango est bien... 21/04/2010, 10h12
PauseKawa Bonjour, C'est un sujet à... 22/04/2010, 07h45
chedu06 Merci pour vos messages !... 22/04/2010, 16h44
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 8
    Par défaut Utilisation de exec*() en python
    Bonsoir ,
    Je voudrais écrire du code en python qui puisse faire les commandes élémentaires du shell(ls, cd, ...). S'il le faut en utilisant la famille exec..
    NB: J'ai déjà mon prompt qui est prèt à lire sur le clavier; il faut donc intrpréter les commandes afin de les exécuter...

    Merci par avance !

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

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonsoir,

    tu cherches à implémenter 'ls' dans une session interactive python en faisant en sorte que la commande se lance en écrivant juste 'ls' et pas 'ls()' ?

    ou alors tu as un script qui lance lui même une session interactive et tu veux pouvoir entrer des commandes shell ?

    pour le premier cas, à vrai dire je ne sais pas trop. pour le second cas, on peut imaginer quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import subprocess
    while 1:
        cmd = raw_input(">>> ")
        if cmd == 'exit':
            break
        else:
            subprocess.Popen(args=cmd.split())

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 139
    Par défaut
    La réponse de Kango est bien celle que j'aurai proposé.
    Maintenant un peu d'explication.

    1) Subporcess
    Tu peux utiliser subprocess qui te permet de traiter la sortie (de la parser, de l'afficher a l'écran etc...). Voila comment ca fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    from subprocess import *
    commande = ["ls","-a"]
    out=Popen(commande,stdout=PIPE)
    (sout,serr)=out.communicate()
    print sout
    en fait la commande doit être une liste ou chaque element est un mot de ta ligne de commande linux (d'ou le .split() de Kango)

    Le sout est la sortie (format=chaine de charactere) si ca fonctionne bien et le serr en cas d'erreur (cf la doc pour plus d'explication la dessus)

    2)os.system
    Un peu moins propre mais qui fonctionne trés bien, la commande os.system.
    Ca te permet de faire executer une opération par ton os, mais a ce moment la tu ne peux plus récupérer la réponse (et donc voir le résultat de ton action).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import os
    os.system("ls -a")
    Bon évidemment il n'y a aucun interet de faire un os.system pour un 'ls', puisque par définition tu ne peux pas voir le résultat...


    3)exec/eval

    Servent a faire executer une chaine de charactere par le programme python lui même
    ex
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    a="print toto"
    exec(a)
    va permettre d'afficher toto.

    eval fais la même chose, mais permet de récupérer le résultat (a la maniere d'une fonction)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    a="6*8"
    b=eval(a)
    print b
    va afficher 48

    bon il parait que ce n'est pas propre et pas trés conseillé. J'avoue que personnellement je ne comprend pas vraiment pourquoi, mais je fais toute confiance aux gens bien meilleurs que moi dans ce domaine, et donc c'est a éviter.

    Il y a la méthode getattr qui te permet de faire plus ou moins la même chose. (et la c'est considéré comme propre)
    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class Toto():
        def foo(self)
            print "hello"
     
    #main
    t=Toto()
    getattr(t,foo)
    la derniere ligne te permet de faire un: t.foo() (et donc en l'occurence d'afficher hello). Bref un peu le même principe qu'exec et eval. Mais en mieux parait-il

    voila j'espere que j'ai été clair
    ++
    Julien

  4. #4
    Membre Expert 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
    Par défaut
    Bonjour,

    C'est un sujet à la mode dernièrement il semble...

    Regarde du coter de Pexpect ou encore ce sujet si tu souhaite quelque chose de plus 'évolué'.

    @+

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 8
    Par défaut
    Merci pour vos messages !
    Mais en fait ce que je veux, c'est de créer un processus ( fils ) qui va éxecuter la commande saisie au clavier(commande destinée au shell par exemple ls -l ou cat toto titi tata ou ps -aux...) le mieux avec la famille exec*().Je na sais pour l'instant pas utiliser la commande os.exec*()
    NB: Toujours en langage Python
    Merci pour votre attention !

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

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    Citation Envoyé par chedu06 Voir le message
    Mais en fait ce que je veux, c'est de créer un processus ( fils ) qui va éxecuter la commande saisie au clavier(commande destinée au shell par exemple ls -l ou cat toto titi tata ou ps -aux...)
    je suppose que tu n'as pas essayé mon bout de code ? c'est exactement ce qu'il fait.

    Citation Envoyé par chedu06 Voir le message
    le mieux avec la famille exec*()
    pour moi le mieux c'est subprocess, chacun son point de vue

Discussions similaires

  1. déclencheur pl/perlu : pb d'utilisation d'exec et unlink
    Par ags_squale dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 21/12/2006, 09h11
  2. [SQL SERVER 2005] Utilisation de Exec dans une fonction ?
    Par Dadou74 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 22/09/2006, 22h09
  3. Utilisation de Timer dans Python
    Par aliassaf dans le forum Général Python
    Réponses: 5
    Dernier message: 17/06/2006, 19h06
  4. [BOOST]Comment utiliser la lib boost.python
    Par Invité dans le forum Bibliothèques
    Réponses: 6
    Dernier message: 30/01/2006, 11h35
  5. Comment utiliser Site Exec sous FTP
    Par phig dans le forum Développement
    Réponses: 2
    Dernier message: 12/08/2003, 17h11

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