python3でバイナリデータを標準出力に出力する

python3でcgiを書いていて、画像データを標準出力に出力しようとしてハマったのでメモ

結論

1. sys.stdout.buffer.write を使う
2. 先に print を使っていたなら sys.stdout.buffer.write の直前に sys.stdout.flush を呼ぶ

サンプルコード

print("Content-Type: image/png")
print("Content-Disposition: attachment; filename=hoge.png")
print("")
sys.stdout.flush() # printとwriteの間に呼ぶ
sys.stdout.buffer.write(data)