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 :

Problème FTP sous windows.


Sujet :

Réseau/Web Python

  1. #1
    Membre actif Avatar de Snooky68
    Homme Profil pro
    Développeur Web/Python/PHP
    Inscrit en
    Mai 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web/Python/PHP
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 273
    Points : 212
    Points
    212
    Par défaut Problème FTP sous windows.
    Bonjour à tous,

    Je viens vers vous pour vous exposez un problème assez étrange!
    J'ai codé (enfin.... copié en grosse partie) un petit code en python pour rapatrier tout les fichiers d'un dossier ftp.
    Le programme fonctionne super bien sous Debian... mais se bloque sous Windows... Et je ne comprend pas pourquoi!

    Voici le code:
    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
    38
    39
    40
    41
     
    import ftplib
    import os
    import time
     
    class ftp(ftplib.FTP):
        def __init__(self, adresse='xx.xx.xx.xx', port=21, user='xxxx', password='xxxxxxx'):
            ftplib.FTP.__init__(self, '')
            self.adresse = adresse
            self.port = port
            self.user = user
            self.password = password
        def Reconnect(self):
            try:
                print "connect %s: %s" % (self.adresse, self.port)
                self.connect(self.adresse, self.port) ## Recherche FTP
                self.login(self.user, self.password) ## Connexion
                self.set_pasv(False)
            except:
                print "Erreur de connection: Tentative dans 10 seconde"
                time.sleep(10)
                self.Reconnect()
     
        def Command(self, command, *args):
            try:
                return command(*args)
            except:
                self.Reconnect()
                return command(*args)
     
    session = ftp()
    lst = []
    session.Command(session.retrlines, 'LIST /dossier/', lst.append)
    i = 0
    for fich in lst:
      i += 1
      if not i in [1,2,3]:
        tab = fich.split()
        session.Command(session.retrbinary, "RETR /dossier/%s"%tab[8] , open('c:/dossier/%s'%tab[8], 'wb').write)
     
    session.close()
    Merci de votre aide, je suis désespéré!

    Edit: J'oubliais... Je suis sous windows XP ou 2003 et j'utilise python 2.5
    /***********************
    Aucune responsabilité n'est engagée sur la lisibilité du message ou les éventuels dommages qu'il peut engendrer.
    Les fautes d'orthographes sus-citées sont déposées auprès de leurs propriétaires respectifs et soumis au copyright. Toutes copies sera sévèrement désapprouvé.
    ************************/

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 114
    Points : 129
    Points
    129
    Par défaut
    Bonjour

    Citation Envoyé par Snooky68 Voir le message
    Le programme fonctionne super bien sous Debian... mais se bloque sous Windows...
    A quel niveau il se bloque ? Sur quelle ligne, quelle fonction ?

    Technique la plus basique et plus bourrine pour répondre à cette question : mettre des print partout. Technique plus élaborée : utiliser le debugger.


    Cordialement
    Emmanuel

  3. #3
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 817
    Points : 7 110
    Points
    7 110
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  4. #4
    Membre actif Avatar de Snooky68
    Homme Profil pro
    Développeur Web/Python/PHP
    Inscrit en
    Mai 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web/Python/PHP
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 273
    Points : 212
    Points
    212
    Par défaut
    Merci de votre aide.

    Alors oui... j'ai déjà recherché la ligne "d'erreur".

    Donc la voici, le programme se bloque sur ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session.Command(session.retrbinary, "RETR /dossier/%s"%tab[8] , open('c:/dossier/%s'%tab[8], 'wb').write)
    Je n'est aucun message d'erreur.
    Exemple:
    Je cherche à télécharger X fichier don le premier se nomme A.asc (asc c'est tu texte... un peut comme csv)
    Le programme marche jusqu'à la ligne précisé si dessus, et le premier fichier (A.asc) est télécharger presque en totalité... il ne manque que 1 ou 2 Ko.

    Et puis plus rien... je peut laissé tourné le programme deux jours mais le fichier A.asc ne se terminera jamais totalement et il ne passera jamais sur le fichier B.asc.

    Obligé de faire un ctrl+c pour stoppé le programme!

    Je ne suis plus au boulot donc j'ai pas d'exemple précis, mais je l'ai tellement étudier que je connait par cœur les réponses, alors pour fred1599:

    print lst:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ['total 7',
    'drwxr-sr-t  14 user      user         4096 Feb 13 23:39 .',
    'drwxr-sr-t  14 user      user         4096 Feb 13 23:39 ..',
    '-rw-r--r--   1 user      user           90 Nov  5 11:11 A.asc',
    '-rw-r-sr--   2 user      user           90 Jan 11 04:49 B.asc',
    '-rw-r-sr--   2 user      user           90 Jan 11 04:49 C.asc',]
    Et bien sur le print fich:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    total 7
    drwxr-sr-t  14 user      user         4096 Feb 13 23:39 .
    drwxr-sr-t  14 user      user         4096 Feb 13 23:39 ..
    -rw-r--r--   1 user      user           90 Nov  5 11:11 A.asc
    Une idée?
    /***********************
    Aucune responsabilité n'est engagée sur la lisibilité du message ou les éventuels dommages qu'il peut engendrer.
    Les fautes d'orthographes sus-citées sont déposées auprès de leurs propriétaires respectifs et soumis au copyright. Toutes copies sera sévèrement désapprouvé.
    ************************/

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 114
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par Snooky68 Voir le message
    Merci de votre aide.

    Donc la voici, le programme se bloque sur ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session.Command(session.retrbinary, "RETR /dossier/%s"%tab[8] , open('c:/dossier/%s'%tab[8], 'wb').write)
    Une idée?
    J'éclaterais cette ligne en plusieurs lignes pour bien cibler le problème.

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    cmd = "RETR /dossier/%s"%tab[8]
    print(cmd)
    f = open('c:/dossier/%s'%tab[8], 'wb')
    print(f)
    session.Command(session.retrbinary, cmd , f.write)
    Cordialement
    Emmanuel

  6. #6
    Membre actif Avatar de Snooky68
    Homme Profil pro
    Développeur Web/Python/PHP
    Inscrit en
    Mai 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web/Python/PHP
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 273
    Points : 212
    Points
    212
    Par défaut
    J'ai essayer en divisant la commande, voici le résultat précis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    total 529472
    drwxrwxrwx    2 root     sys          8192 Sep 25 23:23 .
    drwxrwxrwx   12 gestion  group       16384 Sep 25 23:23 ..
    -rw-rw-rw-    1 gestion   group     3641344 Sep 15 06:42 JALONNEMENT.mdb
    JALONNEMENT.mdb
    RETR /dossier/JALONNEMENT.mdb
    <open file 'D:\dossier\JALONNEMENT.mdb', mode 'wb' at 0x01400578>
    ok
    -rwxrwxrwx    1 gestion  group    22054435 Sep 25 23:23 agedos.asc.Z
    agedos.asc.Z
    RETR /dossier/agedos.asc.Z
    <open file 'D:\dossier\agedos.asc.Z', mode 'wb' at 0x01400800>
    Et voici le code précis qui génère sa:
    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
    session.Command(session.retrlines, 'LIST /dossier/', lst.append)
    i = 0
    for fich in lst:
      print fich
      i += 1
      if not i in [1,2,3]:
        tab = fich.split()
        print tab[8]
        cmd = "RETR /dossier/%s"%tab[8]
        print cmd
        a = open('D:\\dossier\\%s'%tab[8], 'wb')
        print a
        session.Command(session.retrlines, cmd , a.write)
        a.close()
        print "ok"
    session.close()
    Alors voilà... il y a un fichier JALONNEMENT qui c'est ajouté sur le serveur... A noté que ce dernier passe bien! C'est donc uniquement les fichier .Z qui ne passe pas (désoler pour l'erreur d'ailleurs... j'avais pas dit sa sur les précédents post)

    Pour plus de précision j'ai aussi déplacer le "print "ok"" au dessus de a.close().
    Mais le resultat est le même! Ce n'est pas le close qui pause problème!
    /***********************
    Aucune responsabilité n'est engagée sur la lisibilité du message ou les éventuels dommages qu'il peut engendrer.
    Les fautes d'orthographes sus-citées sont déposées auprès de leurs propriétaires respectifs et soumis au copyright. Toutes copies sera sévèrement désapprouvé.
    ************************/

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 114
    Points : 129
    Points
    129
    Par défaut
    Bonjour

    Citation Envoyé par Snooky68 Voir le message
    C'est donc uniquement les fichier .Z qui ne passe pas (désoler pour l'erreur d'ailleurs... j'avais pas dit sa sur les précédents post)
    A ce point, deux possibiltées :
    1/ il y a un problème coté serveur quand on demande ces fichiers
    2/ il y a un problème coté client à la réception.

    Pour déterminer de quel coté est le problème, je tenterai de récupérer tous les fichiers en les mettant dans un même et unique fichier par 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
    session.Command(session.retrlines, 'LIST /dossier/', lst.append)
    i = 0
    for fich in lst:
      print fich
      i += 1
      if not i in [1,2,3]:
        tab = fich.split()
        print tab[8]
        cmd = "RETR /dossier/%s"%tab[8]
        print cmd
        a = open('D:\\toto', 'wb')
        print a
        session.Command(session.retrlines, cmd , a.write)
        a.close()
        print "ok"
    session.close()
    Cordialement
    Emmanuel

  8. #8
    Membre actif Avatar de Snooky68
    Homme Profil pro
    Développeur Web/Python/PHP
    Inscrit en
    Mai 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web/Python/PHP
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 273
    Points : 212
    Points
    212
    Par défaut
    Le problème reste le même! Il y a un moment ou le fichier ne sa télécharge plus!
    J'en conclus que le problème viendrais plutôt du serveur! Mais alors pourquoi un logiciel client FTP comme FireFTP peut-il télécharger mes fichiers?
    /***********************
    Aucune responsabilité n'est engagée sur la lisibilité du message ou les éventuels dommages qu'il peut engendrer.
    Les fautes d'orthographes sus-citées sont déposées auprès de leurs propriétaires respectifs et soumis au copyright. Toutes copies sera sévèrement désapprouvé.
    ************************/

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 114
    Points : 129
    Points
    129
    Par défaut
    Bonjour

    Je sèche un peu sur ce problème.

    Cependant, si j'ai bien suivi, cela marche très bien sous debian.

    Donc mes derniers conseils sont en vrac :

    - Réexécuter cela sous Debian avec toutes les traces pour voir si une différence apparait.

    - Vérifier s'il s'agit bien des fichiers ".Z" ou seulement du 3ème ou 4 ème fichier en général. Pour cela changer l'ordre de chargement.

    - Faire un essai avec le nom du fichier qui pose problème en dure dans le programme.


    Cordialement
    Emmanuel

  10. #10
    Membre actif Avatar de Snooky68
    Homme Profil pro
    Développeur Web/Python/PHP
    Inscrit en
    Mai 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web/Python/PHP
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 273
    Points : 212
    Points
    212
    Par défaut
    Citation Envoyé par emmanuel_dumas Voir le message
    - Réexécuter cela sous Debian avec toutes les traces pour voir si une différence apparait.
    Malheureusement... pas de différence à par que tout fonctionne.

    Citation Envoyé par emmanuel_dumas Voir le message
    - Vérifier s'il s'agit bien des fichiers ".Z" ou seulement du 3ème ou 4 ème fichier en général. Pour cela changer l'ordre de chargement.
    J'ai essayez tout les fichiers! Les .Z bloque tous... les autres passe tous!

    Citation Envoyé par emmanuel_dumas Voir le message
    - Faire un essai avec le nom du fichier qui pose problème en dure dans le programme.
    Aussi essayez! Sans résultat

    Merci encore pour l'aide! Si quelqu'un crois savoir, toute idée est la bien venu!
    Pour le moment... vive Debian!
    /***********************
    Aucune responsabilité n'est engagée sur la lisibilité du message ou les éventuels dommages qu'il peut engendrer.
    Les fautes d'orthographes sus-citées sont déposées auprès de leurs propriétaires respectifs et soumis au copyright. Toutes copies sera sévèrement désapprouvé.
    ************************/

  11. #11
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Le fichier .Z doit être un fichier binaire et à priori, ftplib implémente une fonction de récupération de données dans le cas de fichier binaire.

    A la place de essayervoir la doc ici : http://docs.python.org/library/ftpli...FTP.retrbinary.

    Je n'ai pas testé mais ça me paraît plausible comme solution au problème.
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  12. #12
    Membre actif Avatar de Snooky68
    Homme Profil pro
    Développeur Web/Python/PHP
    Inscrit en
    Mai 2006
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web/Python/PHP
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 273
    Points : 212
    Points
    212
    Par défaut
    J'ai trouvé!!!

    Je me disais bien que python était trop bien fait pour que se soit sa faute!!!

    Et si c'est pas python... c'est forcément Windows... et sont pare feu.
    J'ai désactivé le pare-feu et tout fonctionne bien!

    Remarqué l'étrangeté du pare-feu Windows qui ne bloque pas le téléchargement dès le début, mais seulement à la fin du fichier! Et qui, bien sur..., laisse passé les fichier .mdb (Microsoft)

    Bon.... Merci beaucoup à tous.
    /***********************
    Aucune responsabilité n'est engagée sur la lisibilité du message ou les éventuels dommages qu'il peut engendrer.
    Les fautes d'orthographes sus-citées sont déposées auprès de leurs propriétaires respectifs et soumis au copyright. Toutes copies sera sévèrement désapprouvé.
    ************************/

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

Discussions similaires

  1. [MFC]Problème combobox sous Windows 2000
    Par titoine1978 dans le forum MFC
    Réponses: 2
    Dernier message: 12/02/2007, 20h14
  2. Serveur FTP sous windows
    Par jak0 dans le forum IIS
    Réponses: 2
    Dernier message: 25/01/2006, 11h54
  3. quel serveur FTP sous Windows ????
    Par dm38 dans le forum Internet
    Réponses: 5
    Dernier message: 24/01/2006, 14h30
  4. [VB.NET2003] : Problème affichage sous Windows 98
    Par alkponn dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/10/2005, 16h34
  5. .htaccess problème création sous windows
    Par Leviathan_72 dans le forum Apache
    Réponses: 2
    Dernier message: 18/05/2005, 20h29

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