2010-10-19 5 views
2

J'écris une application qui est supposée télécharger un fichier sur un serveur FTP.Comment utiliser FTPlib en python

Voici le code:

try: 
     f = open(filename,"rb") 
    except: 
     print "error 0" 
    try: 
     ftp = FTP(str(self.ConfigUri)) 
     print "CONNECTED!" 
    except: 
     print "CANNOT CONNECT" 
    try: 
     ftp = FTP(str(self.ConfigUri)) # connect to host, default port 
    except: 
     print "error 1" 
    try: 
     ftp.login()    # user anonymous, passwd [email protected] 
    except: 
     print "error2" 
    try: 
     ftp.storbinary('STOR ' + filename, f) 
    except: 
     print "error 3" 
    try: 
     ftp.quit() 
    except: 
     print "error 4" 

Je reçois une erreur à ftp.storbinary ('STOR' + nom de fichier, f). Des idées pourquoi?

+2

Essayez de remplacer les lignes 'except:' par 'excepté Exception, e:' et laissez 'print e' dans la ligne suivante. Il vous donnera plus d'informations que la simple erreur "impression" 3 "' – eumiro

+1

On dirait que vous êtes amoureux du code standard. Avez-vous pensé à la programmation en Java? Ok, blague à part - ne jamais utiliser 'try: ... sauf:'. Si vous ne pouvez pas gérer l'exception spécifique, laissez-la tomber, afin que vous puissiez voir la traceback. Supprimez toutes les lignes 'except: print ...' et dites-nous quelle exception vous obtenez. – AndiDog

+1

pourquoi vous connectez deux fois? – SilentGhost

Répondre

1

Il se pourrait que le nom de fichier est le chemin complet, vous devez utiliser le nom de base à la place:

import os 
folder, base = os.path.split(filename) 
ftp.storbinary('STOR ' + base, f) 

Si pas faire que votre python est en cours d'exécution au bon endroit:

import os 
print os.getcwd() 
0

Qu'est-ce que erreur le rapport de code suivant?

try: 
    with open(filename,"rb") as f: 
     ftp = FTP(str(self.ConfigUri)) # connect to host, default port 
     ftp.login()    # user anonymous, passwd [email protected] 
     ftp.storbinary('STOR ' + filename, f) 
     ftp.quit() 
except Exception, e: 
    print e 

EDIT: Error 550? On dirait erreur d'accès refusé ... Est-ce que l'utilisateur anonyme ont le droit d'écrire dans ce répertoire FTP?

+0

Pas de tel fie ou répertoire – Juli

+0

filename est doc.txt – Juli

+0

le fichier doc.txt existe-t-il dans le répertoire courant? – eumiro

0

Il semble que vous transmettiez un chemin d'accès complet pour ouvrir le fichier et que vous utilisez le même chemin complet pour nommer le fichier ftplib. Au lieu de cela, cd à ce répertoire et nommez le fichier avec juste le nom de fichier.

avoir volé code @ eumiro:

from ftplib import FTP 
import os.path 

try: 
    with open(fullpath,"rb") as f: 
     directory, filename = os.path.split(fullpath) 
     ftp = FTP(str(self.ConfigUri)) # connect to host, default port 
     ftp.login()    # user anonymous, passwd [email protected] 
     ftp.cwd(directory) 
     ftp.storbinary('STOR ' + filename, f) 
     ftp.quit() 
except Exception, e: 
    print e 

Si le répertoire est pas sur le serveur, vous pouvez le faire:

ftp.mkd(directory) 

Ou vous pouvez omettre l'appel ftp.cwd() et juste Placez le fichier dans la racine ftp.

+0

'directory' est un répertoire local – SilentGhost

+0

@SilentGhost: J'ai compris. Il est possible que le serveur ait la même structure de répertoire ou que l'OP souhaite créer cela. Placer le fichier dans la racine ftp serait le test le plus direct. (Ma suggestion de diviser le répertoire et le nom de fichier était basée sur le soupçon non testé que ftp.storbinary() ne prend pas du tout les chemins.) Qui sera le premier à être mis sur cette question? Woooo, l'anticipation! – hughdbrown

Questions connexes