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 :

ftplib + callback


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut ftplib + callback
    Bonjour,

    Je veux utiliser un callback lors de l'upload d'un fichier sur un site ftp. Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    from ftplib import FTP
    def UploadTracker(): print "HELLO"
     
    myftp = FTP()
    myftp .connect(host='mysite.com')
    myftp .login('me','mypw') 
    myftp .storbinary('STOR mydata.txt', open('mydata.txt', 'rb'), callback=UploadTracker())
    myftp .quit()
    Le téléchargement de mydata.txt fonctionne bien, mais le résultat affiche seulement un "HELLO" au début du téléchargement ...
    La taille de mydata.txt est de 1800ko.
    J'attendais donc beaucoup de messages HELLO (à chaque fois qu'un bloc de 8 192 octets est téléchargé) mais cela ne fonctionne pas.
    Ai-je fait une erreur?

    J'ai essayé différentes manières d'écrire ce code (changement de la taille du blocksize, ajout de variables globales pour messages de debug, ) mais aucune différence, un seul appel à UploadTracker est effectué. Quelle est mon erreur?

    Merci beaucoup pour votre aide .
    Roberto

  2. #2
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    slut,

    Enlève les parenthèses ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    myftp .storbinary('STOR mydata.txt', open('mydata.txt', 'rb'), callback=UploadTracker())
    c'est comme si tu avais écrit callback=None

  3. #3
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    La fonction sur laquelle pointe le callback (ici UploadTracker) doit avoir comme argument le bloc transféré (donc: UploadTracker(bloc)). C'est ce qui permet de mettre à jour une barre de progression dans un programme graphique.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Ca marche !!
    Un grand merci pour votre aide !!

    Je n'avais pas compris qu'il fallait définir un argument dans la fonction callback . Le nom de l'argument ne semble pas avoir d'importance .
    Que represente cette variable ? Elle semble contenir une partie de mon fichier ..

  5. #5
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par roberto_breizh Voir le message
    ...Le nom de l'argument ne semble pas avoir d'importance .
    Que represente cette variable ? Elle semble contenir une partie de mon fichier...
    A chaque appel, cette fonction "callback" reçoit le bloc qui a été transféré. Ce bloc a par défaut 8192 octets, mais on peut en changer la taille à l'appel de storbinary:

    FTP.storbinary(cmd, fp, blocksize=8192, callback=None, rest=None)
    Et le dernier bloc a, en général, une taille inférieure puisque la taille du fichier téléchargé n'est pas forcément divisible par 8192...

    Et il y a des tas de choses intéressantes dans la doc... ;-) => https://docs.python.org/3/library/ft...FTP.storbinary
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour ces infos !

    J'ai lu la doc (mais je n'ai pas tout compris !) et sans exemple de code , difficile de connaitre la syntaxe exacte .
    Heureusement que vous êtes là !

    Roberto

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 285
    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 285
    Points : 36 773
    Points
    36 773
    Par défaut
    Citation Envoyé par roberto_breizh Voir le message
    J'ai lu la doc (mais je n'ai pas tout compris !) et sans exemple de code , difficile de connaitre la syntaxe exacte
    Vous avez pourtant un bel exemple de code dans la documentation:
    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
    >>> from ftplib import FTP
    >>> ftp = FTP('ftp.debian.org')     # connect to host, default port
    >>> ftp.login()                     # user anonymous, passwd anonymous@
    '230 Login successful.'
    >>> ftp.cwd('debian')               # change into "debian" directory
    >>> ftp.retrlines('LIST')           # list directory contents
    -rw-rw-r--    1 1176     1176         1063 Jun 15 10:18 README
    ...
    drwxr-sr-x    5 1176     1176         4096 Dec 19  2000 pool
    drwxr-sr-x    4 1176     1176         4096 Nov 17  2008 project
    drwxr-xr-x    3 1176     1176         4096 Oct 10  2012 tools
    '226 Directory send OK.'
    >>> ftp.retrbinary('RETR README', open('README', 'wb').write)
    '226 Transfer complete.'
    >>> ftp.quit()
    open('README', 'wb').write est le callback.
    Et comme c'est le "write" d'un fichier, vous savez ce qu'il prend en argument.

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

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2018
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Donc open('README', 'wb').write est le callback ?

    Pourtant , on specifie aussi callback=UploadTracker() ensuite ?

    Il y a deux callback ?

Discussions similaires

  1. Fonction callback
    Par saibe dans le forum Linux
    Réponses: 4
    Dernier message: 19/01/2012, 10h41
  2. Réponses: 3
    Dernier message: 28/10/2004, 08h39
  3. Callback
    Par el_diablos dans le forum Langage
    Réponses: 2
    Dernier message: 09/07/2004, 08h48
  4. Fonction callback dans une classe
    Par julian_ross dans le forum MFC
    Réponses: 8
    Dernier message: 02/03/2004, 11h42
  5. [MFC] Un callback dans des MFC ...
    Par elsargento dans le forum MFC
    Réponses: 3
    Dernier message: 18/02/2004, 16h04

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