我有以下脚本从远程FTP站点获取文件并在本地下载:
for i in ftp.nlst():
ftp.retrbinary("RETR " + i, open(local_file_path + "/" + i, "wb").write)
调试信息显示正在提取文件,我可以看到它正在流式传输到本地系统。一段时间后,下载将暂停,似乎暂停...
get "150 Opening BINARY mode data connection for 'filename' (163479928 bytes).\n"
resp "150 Opening BINARY mode data connection for 'filename' (163479928 bytes)."
答案 0 :(得分:0)
您是否尝试过使用maxblocksize参数?例如:
ftp.retrbinary("RETR " + i, open(i, "wb").write, maxblocksize=1048576)
我不确定是什么原因引起了您的问题,但如果您的文件很大,则可能与FTP服务器端的缓冲区大小有关。
答案 1 :(得分:0)
如果您要检索多个文件,我会列出名称并确保每个文件都正确关闭。
for name in ftp.nlst():
print(name) # for debugging
with open(local_file_path + "/" + name, "wb") as f:
ftp.retrbinary("RETR " + i, f.write)
答案 2 :(得分:0)
此问题的底线是互联网连接(下载速度1.45MB)以及ftplib如何处理连接丢弃。使用 retrbinary 时,如果连接断开,则永远不会恢复。 ftplib需要支持块模式(RFC 959),因此如果连接断开,它可以从收到的最新块开始恢复。