cStringIO バッファをディスクに書き込もうとしています。バッファは、pdf、画像、または html ファイルを表す場合があります。
私が取ったアプローチは少し不安定に見えるので、解決策として別のアプローチも受け入れます。
def copyfile(self, destfilepath):
if self.datastream.tell() == 0:
raise Exception("Exception: Attempt to copy empty buffer.")
with open(destfilepath, 'wb') as fp:
shutil.copyfileobj(self.datastream, fp)
self.__datastream__.close()
@property
def datastream(self):
return self.__datastream__
#... inside func that sets __datastream__
while True:
buffer = response.read(block_sz)
self.__datastream__.write(buffer)
if not buffer:
break
# ... etc ..
test = Downloader()
ok = test.getfile(test_url)
if ok:
test.copyfile(save_path)
ファイル全体を正常に読み取り、それが私が興味を持っているタイプであることがわかるまで、ディスクへのデータの書き込みを開始したくないため、このアプローチを採用しました。
copyfile() を呼び出した後、ディスク上のファイルは常に 0 バイトです。