この方法を使用してftplibでファイルをダウンロードすると、次のようになります。
ftp = ftplib.FTP()
ftp.connect("host", "port")
ftp.login("user", "pwd")
size = ftp.size('locked')
def handleDownload(block):
f.write(block)
pbar.update(pbar.currval+len(block))
f = open("locked", "wb")
pbar=ProgressBar(widgets=[FileTransferSpeed(), Bar('>'), ' ', ETA(), ' ', ReverseBar('<'), Percentage()], maxval=size).start()
ftp.retrbinary("RETR locked",handleDownload, 1024)
pbar.finish()
ファイルが1MB未満の場合、ファイルをプッシュするのに十分なデータを含む別のファイルをダウンロードするまで、ファイルはバッファーにスタックします。ftp.size(filename)を20で割って動的バッファを作成しようとしましたが、同じことが起こります。では、1 mb未満の単一ファイルをダウンロードしても、コールバック関数を使用できるようにするにはどうすればよいですか?