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 :

"Bug" aléatoire sur script downloader [Python 3.X]


Sujet :

Python

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 320
    Par défaut "Bug" aléatoire sur script downloader
    Bonsoir,
    Je rencontre un soucis aléatoire de téléchargement de fichier vide (grib) auprès de la NOAA que je n'arrive pas à expliquer.
    Ce soucis se passe systématiquement en sortie de la boucle while True:Lorsque les fichiers sont déjà présent (r.status_code == 200), le script ne plante jamais donc je suppose que c'est cette boucle while qui n'est pas correcte

    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
    35
    36
    37
     
    [...]
    s = Session()
    noaaUrl = 'https://nomads.ncep.noaa.gov/cgi-bin/filter_gfs_1p00.pl'
    params = {
        'file': 'file',
        'lev_10_m_above_ground': 'on',
        'var_UGRD': 'on',
        'var_VGRD': 'on',
        'leftlon': '0',
        'rightlon': '360',
        'toplat': '90',
        'bottomlat': '-90',
        'dir': 'dir'
    }
     
    [...]
     
    for c_tm in range(6, 387, 3):
        params['file'] = 'gfs.t' + cpo_tz(c_h)[1] + 'z.pgrb2.1p00.f' + f'{c_tm:03}'
        params['dir'] = '/gfs.' + cpo_tz(c_h)[0] + '/' + cpo_tz(c_h)[1]
     
        grb2file = 'GFS1_' + cpo_tz(c_h)[0] + '_' + cpo_tz(c_h)[1] + '_' + f'{c_tm:03}' + '.grb2'
        grbfile = 'GFS1_' + cpo_tz(c_h)[0] + '_' + cpo_tz(c_h)[1] + '_' + f'{c_tm:03}' + '.grb'
        ncfile = 'GFS1_' + cpo_tz(c_h)[0] + '_' + cpo_tz(c_h)[1] + '_' + f'{c_tm:03}' + '.nc1'
     
        r = s.get(noaaUrl, params=params)
        while True:
            if r.status_code != 200:
                print('Waiting ...')
                sleep(60)
            break
     
        r = s.get(noaaUrl, params=params)
        with open(join(path_c_tz_grb2, grb2file), 'wb') as f:
            f.write(r.content)
    [...]
    Y'a t'il quelque chose qui n'est pas correct ?
    Merci

  2. #2
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 919
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par rlelamer Voir le message
    Ce soucis se passe systématiquement en sortie de la boucle while True:Y'a t'il quelque chose qui n'est pas correct ?
    Merci
    Bonjour,
    Quelque soit les conditions, vu l'emplacement de ton break, ton while ne rebouclera pas...

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Salut,

    Citation Envoyé par rlelamer Voir le message
    Y'a t'il quelque chose qui n'est pas correct ?
    Si l'idée est de dire je fais un .get et si le "status" n'est pas 200 on recommence 60 secondes plus tard, pas facile de la retrouver dans le code.

    De plus vous écrivez:
    Citation Envoyé par rlelamer Voir le message
    Lorsque les fichiers sont déjà présent (r.status_code == 200)
    Cela traduit le succès de la requête et çà n'a pas trop de rapport avec fichier présent ou pas.

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

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 320
    Par défaut
    Bonsoir,
    Merci pour vos réponses.

    Je pense avoir compris ce que tu soulignes @Hominidé et j'ai donc fais une petite modification de la boucle while True, que je testerais à partir de 23h30 (UTC+2) pour j'espère la valider ...

    @wiztricks
    je comprends pas bien votre remarque
    pas facile de la retrouver dans le code
    Désolé si je répond à coté de la plaque ... mais ce script n'est pas un "gros" code ... il fait 500 lignes environ car il est très commenté pour m'y retrouver, gavé de print() qui me servent à valider que j'obtiens bien ce que je souhaite et également pas du tout optimisé (= surement très mal écrit avec mes nombreuses répétitions), c'est mon premier script donc il est loin d'être parfait 😉

    Cela traduit le succès de la requête et çà n'a pas trop de rapport avec fichier présent ou pas.
    Ça, ça relève d'une mauvaise comprehension/interpretation de ma part ... basé sur ceci
    200 OK:
    La requête a réussi. Le signification du succès peut varier selon la méthode HTTP :
    => GET : La ressource a été récupérée et est retransmise dans le corps du message.
    😖

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 320
    Par défaut
    Ça fonctionne comme voulu, merci pour le commentaire @Hominidé c'est ce qui m'a mis sur la bonne piste 😉
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        while True:
            r = s.get(noaaUrl, params=params)
            if r.status_code != 200:
                print('Waiting ...')
                sleep(60)
            else:
                break

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

Discussions similaires

  1. [debutant bug sur script
    Par jmc41320 dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 04/03/2018, 20h36
  2. Réponses: 16
    Dernier message: 06/11/2010, 13h34
  3. Réponses: 1
    Dernier message: 15/10/2007, 14h05

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