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 :

Je cherche à comprendre urllib


Sujet :

Python

  1. #1
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut Je cherche à comprendre urllib
    Pour examiner la façon dont fonctionne le module urllib, j'ai truffé son code d'instructions
    print 'passage 1'
    print 'passage 2'
    print 'passage 3'
    print 'passage 4'
    print 'passage 5'
    print 'passage 6'
    etc

    J'ai ainsi observé qu'avant d'exécuter quelque instruction que ce soit, la progression dans urllib passe par toutes les instructions détectrices print 'passage x' situées en non indentation.
    La dernière instruction qui soit exécutée est print 'passage 19', qui est située avant les 3 dernières de mon urllib modifié:

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    print 'passage 18'
    def main():
        import getopt, sys
        try:
            opts, args = getopt.getopt(sys.argv[1:], "th")
        except getopt.error, msg:
            print msg
            print "Use -h for help"
            return
        t = 0
        for o, a in opts:
            if o == '-t':
                t = t + 1
            if o == '-h':
                print "Usage: python urllib.py [-t] [url ...]"
                print "-t runs self-test;",
                print "otherwise, contents of urls are printed"
                return
        if t:
            if t > 1:
                test1()
            test(args)
        else:
            if not args:
                print "Use -h for help"
            for url in args:
                print urlopen(url).read(),
     
    print '_name_  =  ',__name__
    print 'passage 19'
    # Run test program when run as a script
    if __name__ == '__main__':
        print 'passage 20'
        main()



    Puis il y a exécution de l'instruction print "J'entre dans urlopen"

    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
    print 'passage 3'
    _urlopener = None
    print type(_urlopener)#eee
    def urlopen(url, data=None, proxies=None):
        print "J'entre dans urlopen"
        """urlopen(url [, data]) -> open file-like object"""
        global _urlopener
        if proxies is not None:
            opener = FancyURLopener(proxies=proxies)
        elif not _urlopener: # si _urlopener = None alors not _urlopener vaut True
            print 'ICI je passe dans elif not _urlopener'#eee
            opener = FancyURLopener()
            _urlopener = opener
            print type(opener)
            print type(_urlopener)#eee
        else:
            opener = _urlopener
        if data is None:
            print 'LA je passe par if data is none'
            return opener.open(url)
        else:
            return opener.open(url, data)
    print 'passage 4'

    Je ne comprends pas comment le déroulement du programme peut appeler la fonction urlopen() après être passé par l'instruction print 'passage 19',
    puisqu'aprés il n'y a que 3 lignes avec une condition qui n'est même pas vérifiée ( print '_name_ = ',__name__ indique que __name__ vaut 'urllib').

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Vu que ton premier extrait de code n'est pas dans ton module principal (car tu dis que __name__ ne vaut pas "__main__"), c'est que tu l'importes depuis qqpart; "passage 19" est imprimé lors de l'import de ce module; faudrait voir le code exécuté après cet import, je parie qu'il appelle urlopen.

  3. #3
    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
    Je ne comprends pas comment le déroulement du programme...
    L'execution de quel programme ? si tu appelles urllib directement, alors oui __name__ vaudra "__main__" et l'interprète passera dans le if. Voilà pourquoi urlopen est appelée.

    Note : pour étudier les programmes python, il peut être intéressant d'utiliser :

    • pdb
    • des outils d'aide à la compréhension de programme tels que pycallgraph

  4. #4
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut Merci yacine
    Je savais que pdb existait mais j'avais oublié son nom.
    L'autre , je ne le connaissais pas.
    C'est sûr qu'il va falloir que je regarde de près tout ça un jour, pour le moment je bricole beaucoup avec des outils basiques.

  5. #5
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut Merci dividee aussi
    Je n'ai pas trop le temps de regarder ces choses là en ce moment.
    Mais merci pour vos réponses.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/03/2009, 09h52
  2. Cherche à comprendre : os.spawnl
    Par Chris33 dans le forum Général Python
    Réponses: 3
    Dernier message: 25/03/2008, 10h38
  3. Cherche à comprendre le but d'une certaine ligne d'un script shell
    Par publicStaticVoidMain dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 18/03/2008, 18h55
  4. je cherche à comprendre <ahref=action
    Par rougedragon dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 29/09/2006, 23h32
  5. Nouveau sur XML cherche à comprendre un truck...
    Par shadowbob dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 11/02/2006, 16h10

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