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

Réseau/Web Python Discussion :

ftplib + freebox V6 et HDD externe [Python 2.X]


Sujet :

Réseau/Web Python

  1. #1
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 71
    Points
    71
    Par défaut ftplib + freebox V6 et HDD externe
    Salut à tous !
    Cela fait bien longtemps que je n'ai pas posté sur ce forum. Il était tant que je m'y remette ^^

    Je suis étudiant en master informatique, et fan de sport en tout genre. J'ai donc une petite "go pro x+ hero machin" et des centaines de Go de photo et vidéo (déjà trier ). Toutes ces donnée, vous l'imaginez bien, j'ai pas trop envie de le perdre et je les sauvegarde régulièrement sur un disque dur externe de 2 To de ma freebox v6. De cette façon je peut vider mes cartes mémoires directement chez moi depuis n'importe où dans le monde. Dans ma famille on prend beaucoup de photo, mais il n'y que moi qui les sauvegardes sur ma box. Un jour mon frère c'est fait cambrioler et à perdu près de 10 ans de photo stocké dans son ordinateur, C'est pour ça que j'ai décider de faire un petit script python qui fonctionne en tant que service windows pour automatiser cette sauvegarde sur les ordinateurs de chaque membre de ma famille. bref voici pour le contexte

    Le problème et le suivant :
    normalement la fonction ftp.dir("pathToDirectory") renvoi un liste de chaine de caractère sous la même forme que la commande "ls -l" sous linux. Sous cette forme donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    -rwxrwxrwx   1  freebox  freebox  2937056 Jan 02 13:58 P1100003.JPG
    -rwxrwxrwx   1  freebox  freebox  2957483 Jan 02 13:58 P1100004.JPG
    -rwxrwxrwx   1  freebox  freebox  3542409 Jan 02 13:58 P1100005.JPG
    ...
    mais bizarrement, au milieu de cette commande le résultat change de forme. Je me retrouve juste avec un chemin d'accès absolue vers le fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    -rwxrwxrwx   1  freebox  freebox  3692537 Jan 02 14:02 P1100562.JPG
    -rwxrwxrwx   1  freebox  freebox  3887597 Jan 02 14:02 P1100563.JPG
    -rwxrwxrwx   1  freebox  freebox  3620864 Jan 02 14:02 P1100564.JPG
    /Backup salinie/rezuz/Images/Bolivie_2010/DCIM/110_PANA//P1100565.JPG   # <--- changement de format en plein milieu
    /Backup salinie/rezuz/Images/Bolivie_2010/DCIM/110_PANA//P1100566.JPG
    /Backup salinie/rezuz/Images/Bolivie_2010/DCIM/110_PANA//P1100567.JPG
    Je peut poster l'ensemble du code si vous le voulez mais comme il est plutôt long je préfère mettre un tout petit exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import ftplib
     
    ftp = ftplib.FTP("adresse ip freebox", "login", "mdp")
    ftp.cwd("dossier qui m'interesse")
     
    print ftp.dir()  # affichage de la liste de fichier (et résultat bizarre)
    Pour l'instant j'ai comme solution de "sauter ces fichiers" puisque cela n'en concerne qu'une dizaine a la fin de chaque dossier. Mais c'est plutôt génant quand il s'agit de vidéo de plusieurs centaine de Mo et quand on parle de près de 50 dossiers. ça fait quand même dans les 500 fichiers non sauvegardé. Avez-vous déjà rencontrer un tel problème ? cela peut t'il venir de la bibliothèque ftplib ? ou de la freebox ? ou du HDD externe ? j'avous que je suis un peu perdu la

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 439
    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 439
    Points : 37 030
    Points
    37 030
    Par défaut
    Salut,

    ftp.dir() équivaut à ftp.retrlines('LIST') qui se contente d'afficher les lignes que le serveur envoie.
    Le problème serait plutôt côté serveur FTP de la box.
    Et vous pourriez le confirmer en regardant ce que sort un autre client FTP.

    - W

  3. #3
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 71
    Points
    71
    Par défaut
    Je vois, je viens de faire un test avec FileZilla sur le dossier concerné et après la commande "LIST" j'ai les réponses suivantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    150 File Status OK
    226 Closing data connection
    J'ai poussé un peu plus loin et j'ai réussi a transférer ce dossier sans aucun soucis.
    Donc tout va bien de ce côté la, il semblerai que le serveur fonctionne bien. Il y a t'il un moyen de récupérer les réponses du serveur FTP avec la bibliothèque ftplib ? comme ça je pourrai faire une gestions des erreurs plus poussé.

    [edit] : J'ai trouvé comment faire pour récupérer les réponses du serveur. Il s'agit simplement du retour de la fonction. Et lorsqu'il y a une erreur, je vais gérer les erreur avec un try, catch. Cependant je ne vois toujours pas de solution pour ce problème de format qui change en plein milieu

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 439
    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 439
    Points : 37 030
    Points
    37 030
    Par défaut
    Salut,

    Etes vous sûr que Filezilla a bien expédié une commande LIST plutôt qu'une autre (comme NLST par exemple)?
    Normalement le log devrait vous dire la commande qui a été expédiée.
    note: le retour de la commande LIST étant du format que veut bien le serveur, pas facile d'en parser le retour de façon fiable dans un environnement hétérogène. C'est la raison pour laquelle un Filezilla préférera faire un MLSD qui retourne ces informations sous un format prédéfini pour autant que le serveur la supporte (ce qui est généralement le cas).

    - W

  5. #5
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 71
    Points
    71
    Par défaut
    oui, FileZilla expédie une commande "LIST" voici ce que je trouve dans les logs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Commande :	LIST
    Réponse :	150 File Status OK.
    Réponse :	226 Closing data connection.
    Statut :	Contenu du dossier affiché avec succès
    J'ai déjà pensé au format MLSD qui aurait juste parfait dans mon cas, mais il semblerai que le serveur ftp de la freebox ne connaisse pas cette commande :
    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
     
    #fonction utilisé
    reponse = f.retrlines("MLSD", callback)
     
    # erreur 
    Traceback (most recent call last):
      File "C:\Users\famille\Desktop\DIVERS LEO\BackupBox\windows - Copie\test.py", line 11, in <module>
        reponse = f.retrlines("MLSD", callback)
      File "C:\Python27\lib\ftplib.py", line 437, in retrlines
        conn = self.transfercmd(cmd)
      File "C:\Python27\lib\ftplib.py", line 376, in transfercmd
        return self.ntransfercmd(cmd, rest)[0]
      File "C:\Python27\lib\ftplib.py", line 339, in ntransfercmd
        resp = self.sendcmd(cmd)
      File "C:\Python27\lib\ftplib.py", line 249, in sendcmd
        return self.getresp()
      File "C:\Python27\lib\ftplib.py", line 224, in getresp
        raise error_perm, resp
    ftplib.error_perm: 500 Syntax error, command unrecognized.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 439
    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 439
    Points : 37 030
    Points
    37 030
    Par défaut
    Bizarre: soit Fillezilla reçoit les mêmes données que Python et les rend présentables, soit le serveur expédie des données différentes aux deux clients.
    Lorsqu'il se passe des choses aussi étranges, je sors l'analyseur de protocole (WireShark) pour examiner les messages échangés dans les deux cas.
    à vous de voir.

    - W

  7. #7
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 71
    Points
    71
    Par défaut
    Je n'avais pas du tout pensé à analyser les échange entre le pc et le serveur grâce a wireshark. Je m'en suis tellement servi en License pourtant ...

    De toute façon cela n'as pas été concluant, la seul différence entre mon script et FileZilla c'est que FileZilla envoi la requete "OPTS UTF8 ON" lors de la connection. Tout le reste se passe de la même façon.
    En plus, j'ai découvert quelque chose de plutôt intéressant et cela tout à fait par hasard. Après avoir débranché mon disque dur de la box, j'ai décider de faire mes tests avec le disque interne de cette dernière. Et tout ce passe à merveille ! J'ai poussé un peu plus loin mes tests et j'ai transféré près de 15 Go de donnée sans aucun problème grâce à mon script ...

    Mon problème est encore plus flou du coup
    • Mon système de sauvegarde automatique ne fonctionne partiellement avec le disque dur externe branché à ma freebox mais, il fonctionne très bien avec le disque dur interne.
    • FileZille fonctionne très bien avec les deux HDD


    cela peut-il venir du système de fichier du disque dur externe ? pourquoi mon système fonctionne bien avec le HDD interne mais pas avec l'externe ?

    Bref, je suis perdu et fatigué ce soir. je vais faire un pause en espérant trouver une solution demain avec les idées un peu plus claire

    Ps : J'ai les pcap généré par wireshark et je peut fournir mon code complet si nécessaire

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 439
    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 439
    Points : 37 030
    Points
    37 030
    Par défaut
    Citation Envoyé par rezuz Voir le message
    De toute façon cela n'as pas été concluant, la seul différence entre mon script et FileZilla c'est que FileZilla envoi la requete "OPTS UTF8 ON" lors de la connection. Tout le reste se passe de la même façon.
    Il suffit de comparer les données expédiées par le serveur lors d'un LIST: si elles sont identiques, c'est que Filezilla bosse dur pour les rendre présentables.

    Citation Envoyé par rezuz Voir le message
    cela peut-il venir du système de fichier du disque dur externe ? pourquoi mon système fonctionne bien avec le HDD interne mais pas avec l'externe ?
    Une fois que vous serez convaincu que le problème ne vient pas de Python mais de la Freebox(*), çà serait bien de poster dans un forum d'utilisateurs de cette box pour voir quelle est leur expérience côté ajout de disque externe.
    (*) je suis allez jeté un oeil dans les sources de Filezilla, alors que le client Python se contente d'afficher ce qu'il reçoit, Filezilla bosse dur pour sortir les informations utiles quelque soit le format des lignes retournées - normal puisque çà doit fonctionner en milieu hétérogène.

    - W

  9. #9
    Membre régulier

    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Points : 71
    Points
    71
    Par défaut
    Bon j'ai profité de cette nuit pour faire de long test, et le problème est assez simple en fait. Ma Freebox déconnecte mon disque externe au bout d'un certain temps avant de le relancer. Pourquoi ? je n'en sais rien du tout et la hotline (oui oui la hotline j'ai osé ) non plus.

    J'aurai put faire un système qui relance automatiquement la sauvegarde après une déconnexion en faisant un fine gestion des erreurs et des message renvoyé par le serveur, mais je n'ai plus vraiment le temps, les cours ont repris. J'ai simplement décider de faire autrement, un serveur FTP sur un petit Raspberry Pi qui traînait dans ma maison et l'HDD branché dessus. Après avoir redirigé le port 21 de ma Freebox vers mon Raspberry j'ai un accès complet a mon HDD.

    J'ai lancé un sauvegarde d'environ 1/3 des mes fichiers vidéo et audio (~200 Go) via mon script script fait maison et je suis allez me coucher en croisant les doigts Le lendemain, je lis mes logs et tout c'est bien passé. Toutes les photos, vidéo, fichier, etc ... ont bien était sauvegardé.

    Il semblerai que le problème vienne de la box qui me déconnecte mon disque régulièrement, c'est dommage parce que les services proposé sont très intéressant, mais bon 250 Go ça se remplit vite

    Bref je suis content parce que c'est la première fois que je programme un service windows et que finalement il marche très bien .
    Je met le sujet en résolu et merci à toi Wiztricks pour toute tes bonnes idées (wireshark (comment j'ai put oublier))


    PS : il existe de très bon logiciel de sauvegarde automatique comme Cobian Backup. Gratuit et Open Source

  10. #10
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 038
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 038
    Points : 8 405
    Points
    8 405
    Par défaut
    Citation Envoyé par rezuz Voir le message
    oui oui la hotline j'ai osé
    m'est avis que http://dev.freebox.fr/bugs/ était plus indiqué pour un problème de ce type, en cherchant d'abord un problème similaire, et en ouvrant un éventuel ticket au besoin, s'il s'agit d'un comportement normal on t'aurait envoyé braire, dans le cas contraire le problème aurait été résolu, dans tous les cas tu aurais été fixé

    quant à la "déconnexion" du disque, est-ce que ça n'aurait pas un rapport avec l'arrêt du disque et l'économie d'énergie par exemple ? à voir...

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

Discussions similaires

  1. Vista n'affiche plus mon HDD externe
    Par mehdi_oca dans le forum Windows Vista
    Réponses: 5
    Dernier message: 16/01/2008, 19h44
  2. Installer XP sur Vista sur HDD externe
    Par LePaladin dans le forum Installation
    Réponses: 2
    Dernier message: 25/10/2007, 02h56
  3. HDD Externe, plus de données?
    Par electrosat03 dans le forum Composants
    Réponses: 4
    Dernier message: 21/05/2007, 23h42
  4. Lecture/Ecriture sur HDD externe USB
    Par rems033 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 16/05/2007, 18h12

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