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 :

connaitre les lignes python exécutées


Sujet :

Python

  1. #1
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut connaitre les lignes python exécutées
    Bonjour,
    Je teste mon application python/gtk sous RHEL 5.8 et avec python 2.7.
    J'ai un pb de comportement entre une situation A et B, alors que cela devrait faire la même chose, de plus l'aspect graphique et temps réel de gtk rends l'utilisation du debugger standard difficile.
    Comment puis je connaitre les lignes python déroulées par mon application : similaire à ce que j'obtiendrais en passant par le debugger python et en faisant step sur chaque ligne exécutée, comme il y a des centaines, voire milliers de lignes exécutées, il ne faut pas que ce soit manuel.
    La finalité est de comparer les lignes exécutées dans le cas A et celles dans le cas B, je pourrais alors voir la différence et en déduire ou le comportement de mon application a dévié.
    Merci

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 716
    Par défaut
    Salut,
    Pour générer une "trace" de l’exécution, vous pouvez commencer avec le module trace.
    (facile hein?). Pour comparer ça sera moins rigolo ;-(
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut, autre solution, le module logging et placer des lignes info aux endroits critiques.

  4. #4
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Et comme je viens de l'embarqué je propose une solution professionnelle: Faire du pas à pas. Donc du PyDev sous Eclipse, par exemple. Ce n'est pas un couple réputé pour sa simplicité mais il est très efficace. j'avoue que c'est tellement lourd que je l'utilise le moins possible, préférant un simple éditeur comme scite. Certains bugs m'ont malgré obligé à l'utiliser, et c'est imparable.

    A+

    Pfeuh

  5. #5
    Membre éprouvé Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Par défaut
    Merci beaucoup de me rappeler que le module trace existait (jamais utilisé jusqu'ici).

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Par défaut
    Bonjour, je profite de ce topic pour poser une question qui s'en rapproche : existe-t'il une fonction qui permet d'exécuter une ligne de code générée par notre programme sous forme str de la même manière qu'une ligne de code normale?

  7. #7
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Tu veux dire quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Type "help", "copyright", "credits" or "license" for more information.
    >>> s = u'import sys\nprint sys.path'
    >>> exec(s)
    ['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
    >>>

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Par défaut
    Voilà, c'est ça, un truc du genre :
    (je suis en python 3, je prends l'exemple bête de mon premier programme)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    execute ('''an=input('saisissez une année : ')
    an=int(an)#je ne me préoccupe pas des exceptions
    if an%400==0 or (an%100!=0 and an%4==0) :
        print('bissextile')
    else :
        print('non bissextile')
    ''')
    J'aurais une solution mais elle a des inconvénients :
    - elle fait intervenir un fichier
    - elle ne peut pas être appelée plusieurs fois dans un même programme ou dans le paramètre de la fonction
    - les différentes variables ne sont pas sauvegardées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def execute(code):
        with open('C:/program files/python 33/tempory_data.py', 'w') as fichier:
            fichier.write(code)
        import tempory_data

  9. #9
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Personnellement, je préfère la solution du fichier, elle à l'avantage que le code récupéré est utilisable n'importe où dans le code, et les données sont bien récupérables.

    exemple:
    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
     
    # -*- coding: utf-8 -*-
     
    import sys
     
    class Foo(object):
        def __init__(self):
            self.build_file()
            self.is_odd = self.get_func()
     
        def build_file(self):
            txt = "# -*- coding: utf-8 -*-\ndef is_odd(num):\n"
            txt += "\treturn num % 2"
            with open("isodd.py", "w") as outf:
                outf.write(txt)
     
        def get_func(self):
            import isodd
            return isodd.is_odd
     
    foo = Foo()
    for i in range(10, 20):
        print("%s est impair: %s" %(i, foo.is_odd(i)))
    Ceci implique que le dossier où tu sauves le fichier créé contient aussi un fichier __init__.py

    Tourne avec Python 2 et 3


    Edit: Si tu as un cas plus compliqué à exposer, ouvre un nouveau fil car celui-ci est résolument résolu.

  10. #10
    Membre éclairé
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Par défaut
    En fait, merci de la réponse, j'ai juste pris le code de l'année bissextile en exemple, j'ai besoin d'une fonction permettant d'exécuter le code passé en paramètre.

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 716
    Par défaut
    Citation Envoyé par stalacta Voir le message
    En fait, merci de la réponse, j'ai juste pris le code de l'année bissextile en exemple, j'ai besoin d'une fonction permettant d'exécuter le code passé en paramètre.
    Passer une fonction en paramètre est "simple".
    Construire une fonction en écrivant le script "a la volée" n'est nécessaire que dans des cas extrêmes. Exemple: construction d'un décorateur qui présente les mêmes paramètres d'appels que la fonction appelée.

    Comme vous débutez(*), partez du principe qu'essayer d'utiliser cela, dans votre cas, est une fausse bonne idée.
    C'est un peu comme si vous preniez un médicament sans ordonnance. Si c'est un "placebo" se sera sans conséquences, s'il y a des principes actifs, il aura des effets sur votre sante. Et sauf a vouloir vous suicider, vous espérez que ce faisant ça ira mieux.
    (*) si vous n’étiez pas "débutant" vous ne discuteriez pas de la chose dans un forum, vous l'auriez déjà codée proprement avec ou sans.

    Prenez le temps d'exposer ce que souhaitez faire (le quoi/pourquoi, pas le "comment").
    Quelqu'un trouvera une solution plus adaptée a votre cas.
    Vous en sortirez en sachant mieux programmer en Python et avec une meilleure compréhension de ses fonctionnalités.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Membre éclairé
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Par défaut
    Il est vrai que je me suis pour l'instant débrouillé sans, mais il est vrai que ceci n'est utile que dans certains cas. Je peux en citer quelques-uns :
    - faire une console de commande python mais traduite en français
    - j'avais besoin pour un projet de générer un dictionnaire avec des valeurs binaires qui dépendait de plusieurs chaînes entrées par l'utilisateur, j'ai su me débrouiller sans mais cela a ralenti mon programme.

    Je me demandais donc s'il existait un module pouvant faire cela ou alors s'il existait une autre solution plus efficace que la mienne à laquelle je n'aurais pas pensé.

  13. #13
    Membre éclairé
    Homme Profil pro
    Développeur en formation
    Inscrit en
    Juillet 2013
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en formation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2013
    Messages : 300
    Par défaut
    J'ai trouvé ! la fonction exec !

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

Discussions similaires

  1. [XL-2003] Appliquer une formule à toutes les lignes d'une colonne sans en connaitre le nombre à l'avance
    Par Chevrefeuille dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 08/04/2010, 14h43
  2. Connaitre les tabulations des lignes d'un fichier
    Par Jane Home dans le forum Langage
    Réponses: 0
    Dernier message: 26/02/2010, 13h32
  3. [AC-2003] connaitre les ligne sélectionnée sur formulaire continu
    Par cbleas dans le forum IHM
    Réponses: 2
    Dernier message: 23/09/2009, 21h54
  4. Réponses: 2
    Dernier message: 30/09/2008, 14h18

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