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 dynamique de dir(), comment faire ?


Sujet :

Python

  1. #1
    Membre éclairé
    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
    Points : 773
    Points
    773
    Par défaut utilisation dynamique de dir(), comment faire ?
    Salut,

    Voici mon problème (enfin problème...), admettons que je fasse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import pymedia as pm
    dir(pm)
    J'obtiens bien la liste des fonctions/classes/commandes de pymedia
    mais si je voulais par exemple un peu automatiser le processus, et que je tapais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def exe_dir(module):
       for x in dir(module): dir(module+'.'+x)
    Ca me retourne bien entendu les méthode associés aux strings, cce qui n'est pas vraiment mon but...

    Ma question est donc la suivante : y a-t-il une façon de procéder pour faire ce que je voudrais faire ?

    PS: J'ai déjà test sans succès un exec 'dir(pm.'+x+')'

  2. #2
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Pourquoi voudrais-tu faire ça? import pymedia as pm est beaucoup plus rapide à écrire et en exécution.

  3. #3
    Membre éclairé
    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
    Points : 773
    Points
    773
    Par défaut
    hmmm... et bien, pymedia m'a l'air bien mais, rien n'est expliqué nulepart. la documentation on-line du site est... comment dire.... pas top de de chez pas top du tout, les tutos ne sont que des codes sources de programmes et le forum... or pour ce qui m'intéresse (implementer un lecteur vidéo dans un soft de resynchronisation de sous-titres), le code source du "simple video player" n'as pratiquement aucun commentaire, tout du moins rien d'instructif... et du coup, la commande help est mon amie...
    Et comme je suis une (demi-)feignasse, j'aimerais créer un script qui me premetterait de faire des dir(commande/classe/fonctions) et help(commande/classe/fonctions) de tout le module pymedia, et organiser le tout dans un fichier texte, ça me permetterait d'avoir une vue d'ensemble, et serait un peu moins fastidieux...

    Donc, le but est d'arriver d'une façon ou d'une autre à faire des dir(Var) où Var est le nom d'une commande/fonction/classe/méthode de pymedia, ça m'éviterai de devoir le faire manuellement (trop ennuyeux pour que je persévère à décoder ce module )

    PS: pour les help, pas de problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    help(pm.Player)==help('pm.Player')
    #alors que
    dir(pm.Player)!=dir('pm.Player')

  4. #4
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 302
    Points : 316
    Points
    316
    Par défaut
    Utilises ipython, fais un import pyMedia, puis tapes pyMedia.(notes le point) et frappe fort sur la touche tabulation. Une liste de toutes les classes, fonction et constantes du module apparaît.
    Créer une instance d'une de ces classes, nomme la par exemple O, puis pareil, tapes O. et frappe fort sur la touche tabulation, tu auras la liste de toutes les méthodes et attributs de ta classe.

    Autre solution, utilise le module pretty print (pprint).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import pprint, pyMedia
     
    pprint(dir(pyMedia))
    qui affichera une liste de façon élégante et lisible du contenu de ton module.

    Note : il parait que si on tape doucement sur tabulation ça marche aussi.

  5. #5
    Membre éclairé
    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
    Points : 773
    Points
    773
    Par défaut
    Merci, mais je crois ne pas avoir été très clair, mon problème n'est pas de connaitre les fonctions/classes/méthodes de pymedia (enfin si presque mais pas tout à fait), mon but est d'arriver à quelque chose dans ce goût :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for x in dir(pymedia):
       for y in dir(x):
          help(y)
    Sauf que dans le deuxième bloc, x est un string, et que dir(x) me retourne les fonctions associées aux string et pas les méthodes de la classe visée...

    Alors je te rassure je sais très bien le faire manuellement, mais manuellement, ça m'enchose profondément, d'où la volonté d'automatiser le process...

  6. #6
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 302
    Points : 316
    Points
    316
    Par défaut
    Ah mais fallait le dire plus tôt voilà ce que je te propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    import commands
    for x in dir(commands):
        o = getattr(commands,x)
        if callable(o) :
            help(o)
    Ceci documentra les classes et les functions du module commands.

    Le saviez-vous ? :
    • Un logiciel du nom de doxygen génère automatiquement la documentation HTML des paquetages python en se basant sur les docstring.
    • Un autre logiciel du nom de Epydoc fait aussi la même chose.

  7. #7
    Membre éclairé
    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
    Points : 773
    Points
    773
    Par défaut
    Excellent ! Merci

    J'avais fini par trouver une soluce (plutôt moyenne) qui consistait à utiliser compile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import pymedia
    a='''import pymedia
    for x in dir(pymedia):
       x='pymedia.'+x
       for y in dir(x):
          help(x+y)'''
    b=compile(a,'','exec')
    exec b
    mais j'aime bien ta soluce, et faudra que je regarde de très près doxygène et son homologue, merci

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

Discussions similaires

  1. Utiliser MyBatis avec NetBeans, comment faire ?
    Par bkwaadbk dans le forum Persistance des données
    Réponses: 1
    Dernier message: 08/04/2012, 16h45
  2. Tableau croisé dynamique et espaces - comment faire?
    Par needlesurfer dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2009, 23h35
  3. Réponses: 1
    Dernier message: 03/09/2009, 00h56
  4. Réponses: 12
    Dernier message: 12/04/2006, 14h27
  5. Comment faire une Form MDI dynamiquement modale ?
    Par eponette dans le forum Composants VCL
    Réponses: 5
    Dernier message: 30/09/2005, 10h14

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