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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé 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 : 38
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 273
    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

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 114
    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 confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 086
    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 : 4 086

  4. #4
    Membre éclairé 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 : 38
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 273
    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?

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 114
    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 éclairé 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 : 38
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 273
    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!

+ 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