如何在Python中使用FTPlib
我正在编写一个应用程序,该应用程序应该将文件上载到FTP服务器。如何在Python中使用FTPlib
下面的代码:
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"
我得到一个错误的ftp.storbinary( 'STOR' +文件名,F)。任何想法为什么?
这可能是因为文件名是完整的路径,你应该使用基本名称改为:
import os
folder, base = os.path.split(filename)
ftp.storbinary('STOR ' + base, f)
如果不能确保你的Python是在正确的地方运行:
import os
print os.getcwd()
什么下面的代码报告有错误吗?
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
编辑: Error 550?
貌似拒绝访问的错误...是否匿名用户必须写入该FTP目录下的权利?
看起来您正在传递完整路径来打开文件,并且您正在使用相同的完整路径为ftplib命名该文件。取而代之的是,cd
到那个目录并且用文件名命名文件。
偷@ 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
如果该目录不在服务器上,你可以把它:
ftp.mkd(directory)
或者你可以省略ftp.cwd()调用和公正将文件放在ftp根目录下。
'directory'是一个本地目录 – SilentGhost 2010-10-19 18:25:12
@SilentGhost:我明白了。服务器可能具有相同的目录结构,或者OP想要创建它。将文件放在ftp根目录下将是最直接的测试。 (我建议拆分目录和文件名是基于未经测试的怀疑,即ftp.storbinary()根本不采用路径。)谁将首先在此问题上投票赞成? Woooo,期待! – hughdbrown 2010-10-19 18:42:34
尝试用'except except,e:'替换'except:'行,并在下一行放置print e'。它会给你更多的信息,而不是简单的“打印”错误3“' – eumiro 2010-10-19 18:06:47
似乎你喜欢样板代码。你有没有想过用Java编程?好吧,开开玩笑 - 永远不要使用'尝试:...除了:'。如果您无法处理特定异常,请让它通过,以便您可以看到回溯。删除所有那些'except:print ...'行并告诉我们你得到了什么异常。 – AndiDog 2010-10-19 18:07:48
你为什么连接两次? – SilentGhost 2010-10-19 18:33:20