さまざまなバイトを追加する BytesIO があります。request.add_data メソッドを介して urllib2.Request でこれを送信したい。どうすればいいですか?やってみると
# create request ....
bytesio = BytesIO()
bytesio.write(open("C:\img.jpg", "rb").read())
request.add_data(bytesio.getvalue())
bytesio.close()
urllib2.urlopen(request) # error "expected buffer, got bytes"
私は何を間違っていますか?Python は初めてで、BytesIO からバッファを作成する方法がわかりません。また、試してみると:
request.add_data(bytesio) # instead of bytesio.getvalue()
「閉じたファイルに対する I/O 操作」が表示されます。urlopen の後で bytesio.close を呼び出すまで待機しようとすると、bytesio が閉じられるのを待っているため、要求がハングします。
私は何をする必要がありますか?
答え
request.add_data(str(btyesio.getvalue()))
bytesio.close()
文字列へのキャストはそれを幸せにしました。すべてが StringIO で機能するかどうかは試していませんし、Python 2.x と 3.x の違いも試していません。