如何跟踪使用ftp.retrbinary下载的百分比?

时间:2014-01-24 21:42:30

标签: python python-3.x ftp

我目前正在使用此代码打印出使用ftp.retrbinary从ftp服务器下载的百分比,但下载完成时的完成率为0.27%,并且只表示sizeWritten已完成27828224位。我哪里错了?

from ftplib import FTP

ftp = FTP('host')
ftp.login('usr','pass')
totalSize = ftp.size('100file.zip')
print(totalSize, "bytes")

def download_file(block):
    global sizeWritten
    file.write(block)
    sizeWritten += 1024
    print(sizeWritten, "= size written", totalSize, "= total size")
    percentComplete = sizeWritten / totalSize
    print (percentComplete, "percent complete")

try:
    file = open('100file.zip', "wb")
    ftp.retrbinary("RETR " + '100file.zip' ,download_file)
    print("Download Successful!")
except:
    print("Error")

file.close()
ftp.close()

1 个答案:

答案 0 :(得分:2)

你忽略了块的大小,假装每个块是1K:

sizeWritten += 1024

只需将其更改为:

sizeWritten += len(block)

您的客户端可以使用blocksize参数向服务器发送最大块大小。但是你没有传递一个,所以默认为8192。

那么,为什么你不能得到12.5%,如果你的关系恰好是8倍?好吧,首先,最后一个块几乎总是小于最大值,所以你应该期望超过12.5%。第二,您只给服务器一个 max 块大小;它可以自由决定它不会发送比4K更多的东西,在这种情况下你会得到超过25%的代价。