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 :

FTP avec ftplib et Python 3.5 [Python 3.X]


Sujet :

Python

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut FTP avec ftplib et Python 3.5
    Bonsoir,

    Je me permets d'écrire ce post car je n'arrive pas à débuguer mon code. Mon but est de se connecter sur un serveur FTP en utilisant ftplib.


    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
    # FileCfg Reading
    cfg = configparser.ConfigParser()
    cfg.read('config.cfg')
    adressServer = cfg.get('FTP', 'adress')
    portServer = cfg.get('FTP', 'port')
    loginServer = cfg.get('FTP', 'login')
    passwrdServer = cfg.get('FTP', 'passwrd')
    directoryFile = cfg.get('File','directory')
    nameDevice = cfg.get('Device','name') 
    DebugStatut = cfg.get('Device','debugMode')
     
    # Connect FTP Server
    ftp = FTP()  
    ftp.set_debuglevel(int(DebugStatut))
    ftp.connect(adressServer, int(portServer))
    ftp.set_pasv(1) 					# passive mode  
    ftp.login(loginServer, passwrdServer)

    Mais dés que je le lance j'ai une erreur qui se produit. Est ce à cause de l'emploi de Python 3.5 ?

    Nom : erreur_msdos-ftp.png
Affichages : 714
Taille : 14,8 Ko





    Merci d'avance,
    Clém

  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
    Salut,

    et comme ceci, ça donne quoi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try:
        ftp = FTP(adressServer)
        ftp.login(loginServer, passwrdServer) 
    except Exception as why:
        print('Error: %s' % why)
    te préoccupe pas des autres paramètres pour le moment.

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    salut,

    merci de ton aide,

    Mais il ne se passe rien du tout !!

    Clément

  4. #4
    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
    Si il ne se passe rien c'est qu'il n'y a pas d'erreur. Donc ton login semble correct, passe à la suite des opérations.

  5. #5
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut Oups
    Salut,

    en fait je n'avais laissé le process ce terminer.

    J'ai un timeOut .??
    Voici mon code :
    #! python3

    #Python 3.5
    import ftplib
    from ftplib import FTP
    from ftplib import FTP_TLS
    import os
    import configparser

    # FileCfg Read
    cfg = configparser.ConfigParser()
    cfg.read('config.cfg')
    adressServer = cfg.get('FTP', 'adress')
    portServer = cfg.get('FTP', 'port')
    loginServer = cfg.get('FTP', 'login')
    passwrdServer = cfg.get('FTP', 'passwrd')
    directoryFile = cfg.get('File','directory')
    nameDevice = cfg.get('Device','name')
    DebugStatut = cfg.get('Device','debugMode')

    try:
    ftp = FTP(adressServer)
    ftp.login(loginServer, passwrdServer)
    except Exception as why:
    print('Error: %s' + why)

    Voici mon résultat .?
    Nom : ftp2_error.png
Affichages : 701
Taille : 18,6 Ko




    Je ne comprends pas .? le pb viendrai t-il du fait que je sois sous Python 3.5 ?
    Merci,
    Clém

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

    Citation Envoyé par clem_t001 Voir le message
    Je ne comprends pas .? le pb viendrai t-il du fait que je sois sous Python 3.5 ?
    Est ce que:
    1. votre code fonctionne avec une version de Python antérieure?
    2. vous pouvez vous connecter au serveur avec un client FTP "normal" (autre que ftplib)?



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

  7. #7
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    salut,

    Non je n'ai pas testé avec une version python2

    Oui quand je m'y connecte via un client FTP cela fonction. (mais pas en utilisant Filezilla), uniquelent en utilisant Transmit (FTPclient pour mac)

    Le serveur FTP est filezilla serveur.


    Clém

  8. #8
    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,

    A partir du moment où on est sûr du code et du serveur, il ne reste plus que la configuration du pare-feux (du PC et/ou de la box).
    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

  9. #9
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Re

    Donc j'ai crée mon code sous mon mac en 2.7 et tout est ok

    En revanche quand je l’exécute sous mon Windows 7, j'ai une exception qui me dit bien vouloir contacter l'administateur ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    try:
        ftp = FTP()
        ftp.connect(adressServer, int(portServer))
        ftp.login(loginServer, passwrdServer) 
        print('ok')
    except Exception as error:
        print('Error: %s', error)
    J'ai un peu regarder sous Google concernant Win7, mais je ne comprends pas comment le pareFeu peut me bloquer. Mais cela peut expliquer pourquoi sous mac ça fonctionne et non sous Win7 ???

    Merci,
    Clém

  10. #10
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Salut,

    Le plantage de mon code s'effectue lors de la fonction Login, car j'ai bien le Welcome. Si j'envoi une commande via sendcmd("USER "+nomUser), bien ça plante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    try:
        ftp = FTP()
        ftp.set_debuglevel(int(DebugStatut))
        #ftp.connect(adressServer, int(portServer))
        #ftp.set_pasv("true")
        ftp.sendcmd("USER "+ *****)
        #ftp.login(loginServer, passwrdServer, 9) 
        print('ok')
    except Exception as error:
        print('Error: ', error)
    Avez vous une idée ?

    Merci
    Clem


    PS : Pour info filezilla client ne peut pas se connecter au serveur, mais en revanche cyberduck se connecte avec les mêmes identifiants.

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par clem_t001 Voir le message
    Avez vous une idée ?
    Postez l'erreur retournée par Python.

    Citation Envoyé par clem_t001 Voir le message
    PS : Pour info filezilla client ne peut pas se connecter au serveur, mais en revanche cyberduck se connecte avec les mêmes identifiants.
    Ce qui veut dire que votre serveur est quand même plutôt particulier...

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

  12. #12
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Postez l'erreur retournée par Python.



    Ce qui veut dire que votre serveur est quand même plutôt particulier...

    - W
    La seule particularitée est le port de connection qui N est pas le 21.

    Quand j exécute mon code en ligne de commande tout j arrive à me logguer sur le ftp. En utilisant sendcmd() et non connect.

    En revanche quand je fais interprèter mon fichier py ça plante.

    Je post le big, D ici 30"

    Clem

  13. #13
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Voila la copie du bug
    Nom : 2016_07_29_17_45_59_C_Windows_system32_cmd.png
Affichages : 634
Taille : 16,2 Ko

    et voici le code exécuté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    try:
        ftp = FTP()
        ftp.set_debuglevel(int(DebugStatut))
        ftp.connect(adressServer, int(portServer))
        ftp.login("*****", "******") 
    except Exception as error:
        print('Error: ', error)
    Et voici le retour via la CMD python
    Nom : 2016_07_29_17_53_32_Python_3.X_FTP_avec_ftplib_et_Python_3.5.png
Affichages : 686
Taille : 19,6 Ko

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

    Votre problème avance: car hier çà plantait lors du connect: aujourd'hui c'est ftp.login("*****", "******") qui se vautre.

    Quand j exécute mon code en ligne de commande tout j arrive à me logguer sur le ftp. En utilisant sendcmd() et non connect.
    Etant donné que vous ne pouvez effectuer de .sendcmd() avant le "connect", doit-on supposer qu'à la place de ftp.login(), vous le décomposez en ftp.sendcmd('USER' + "****"), ftp.sendcmd("PASS", "***"),... ???

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

  15. #15
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Quand j exécuté le ftp.login(...) dans mon script ça plante. Quand j exécuté en console ça plante.

    Quand j exécuté sendcmd('USER ' + xxxx) dans mon script ça plante. En revanche quand je l exécuté en console ça fonctionne...

  16. #16
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut e
    Citation Envoyé par clem_t001 Voir le message
    Quand j exécuté le ftp.login(...) dans mon script ça plante. Quand j exécuté en console ça plante.

    Quand j exécuté sendcmd('USER ' + xxxx) dans mon script ça plante. En revanche quand je l exécuté en console ça fonctionne...
    Toutes choses égales par ailleurs, la différence est que le script va lancer ses commandes plus vite que que vous pouvez les taper à la console.
    Essayez d'ajouter une attente d'une demi-seconde entre le retour du ftp.connect et le ftp.sendcmd('USER' + ...) - i.e. un time.sleep(0.5) - pour voir.

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

  17. #17
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    J'ai essayé le time.sleep() et cela ne change rien.

    Pour info quand j’exécute le script sur mon mac ça fonctionne correctement. Mais ça plante sur mon Win7.

    Clém

  18. #18
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par clem_t001 Voir le message
    Pour info quand j’exécute le script sur mon mac ça fonctionne correctement. Mais ça plante sur mon Win7.
    De toutes façons, c'est côté serveur que çà se passe: vous lui expédiez un message et il répond "j'en veux pas".
    Peut être y-a-t-il une information intéressante dans les logs du serveur?
    Sinon, vous pouvez vous amusez à décortiquer les messages échangés avec un outil comme Wireshark et voir la différence lorsque vous essayez avec la console Python vs. exécutez le script.

    Ça serait bien aussi de postez les commandes passées et les retours dans les deux cas (çà permettrait de s'assurer que "certaines choses sont égales par ailleurs").

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

  19. #19
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Salut,

    Voila les informations vu sur le server Fizilla

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    (038718)31/07/2016 11:36:22 - (not logged in) (***)> Connected on port ***, sending welcome message...
    (038718)31/07/2016 11:36:22 - (not logged in) (***)> 220 Bienvenue sur le FTP APS Contacter l'administrateur sur
    (038718)31/07/2016 11:36:22 - (not logged in) (***)> USER ***
    (038718)31/07/2016 11:36:22 - (not logged in) (***)> 331 Password required for ***
    (038718)31/07/2016 11:36:22 - (not logged in) (***)> disconnected.

  20. #20
    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,

    Quand quelque chose ne va pas, il est important de pouvoir recevoir de l'exécution des infos intelligibles sur le problème.

    Voilà un petit code qui essaie de faire ça pour l'accès client ftp. Après ouverture de la cession, ça ne fait qu'une seule chose: lister le contenu du répertoire par défaut.

    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
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # Python 3
     
    import sys
    import ftplib
     
    serveurftp = "xxxxxxxxxxxxxx"
    nom = "xxxxxxxxxxx"
    mdpasse = "xxxxxxxxxxxx"
    passif = True
     
    ftp = ftplib.FTP()
     
    try:
        ftp.connect(serveurftp)
    except ftplib.all_errors  as msgerr:
        print("Erreur ftp: serveur inconnu ou ne répond pas ({})".format(msgerr.args[0]))
        sys.exit()
     
    try:
        rep1 = ftp.sendcmd('USER ' + nom)
        print(rep1) # => 331 Password required for operateur
        rep2 = ftp.sendcmd('PASS ' + mdpasse)
        print(rep2) # => 230 User operateur logged in
    except ftplib.all_errors  as msgerr:
        print("Erreur ftp: nom ou mot de passe inconnu ({})".format(msgerr.args[0]))
        sys.exit()
     
    ftp.set_pasv(passif)
     
    try:
        print(ftp.dir())
    except Exception as msgerr:
        print("Les données ne passent pas (pare-feux?) ({})".format(msgerr.args[0]))    
     
    try:
        ftp.quit() # fermeture interactive avec le serveur
    except ftplib.all_errors:
        ftp.close() # fermeture unilatérale
    Pour l'ouverture de la cession (login), on utilise en général l'instruction Python "ftp.login(nom, mdpasse)". En remplacement, on peut utiliser "ftp.sendcmd" qui est plus proche du protocole ftp, mais il faut dans ce cas passer les 2 instructions pour le nom et le mot de passe!

    A l'affichage de mon code, on retrouve bien le retour normal de ftp.sendcmd('USER ' + nom), qui est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    331 Password required for operateur
    Mais il faut que la 2ème instruction "ftp.sendcmd('PASS ' + mdpasse)" soit satisfaite pour renvoyer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    230 User operateur logged in
    Sans cela, aucun espoir que ça marche à la suite.
    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

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Python 3.X] Transfert FTP avec Python
    Par meumeu73.1 dans le forum Général Python
    Réponses: 12
    Dernier message: 14/10/2014, 07h59
  2. Réponses: 15
    Dernier message: 01/09/2005, 10h07
  3. transfert ftp avec le composant
    Par sillycoder dans le forum Composants VCL
    Réponses: 3
    Dernier message: 19/05/2005, 09h35
  4. [Indy 10] Serveur FTP avec SSL
    Par KarMa_CoMa dans le forum Web & réseau
    Réponses: 5
    Dernier message: 21/04/2005, 09h51
  5. lister le contenu d'un serveur ftp avec NMFTP
    Par jackson dans le forum C++Builder
    Réponses: 2
    Dernier message: 25/02/2005, 17h42

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