def download(self):
ftp = self.connect()
try:
size = ftp.size(filename=self.filename)
print "Total size of {filename} is {size}".format(filename=self.filename, size=size)
written_till_now = 0
def handle(bytes):
f.write(bytes)
print "written bytes: {}".format(bytes)
with open(self.filename, 'wb') as f:
ftp.retrbinary('RETR {}'.format(self.filename), handle)
except (socket.error, error_perm) as e:
raise DownloaderException("Error in downloading file {filename}: {message}".format(filename=self.filename, message=str(e)))
except EOFError as e:
print "file {filename} downloaded successfully".format(filename=self.filename)
現在ダウンロードしているデータの量を把握し、ダウンロードしたすべてのデータストリームについて追加の処理を行いたいと思います。入れ子関数内で親変数にアクセスするPython
download
機能の中にhandle
関数を作成しました。
Python ftblip.retrbinaryは、指定されたコールバックにデータを提供します。私の場合はhandle
しかし何とか実行されていません。
また、ネストされた関数については、変数の範囲を理解していません。私の理解では、私はそれらを変更していない限り、子スコープの親スコープで定義された変数を使用することができます。しかし、この場合f
はオブジェクトであり、私はむしろそのメソッドを呼び出すことを変更していませんwrite
。私が何かを逃している場合は私を修正してください。
外からもありません。 –
私はそれを取り入れています。後で私はそれにかかるプログレスバーを作ります。変数 '' 'written_till_now'''は私がアクセスしてインクリメントします –
私は1バイトも取得していないので、そのと思います。しばらくすると例外をスローして接続を拒否します。 –