stdoutではまる

安全仕様というのはありがたいものなのだけど、時として邪魔になることも。

たとえば、同じドイツ車でもBMWはドライバーを信用するので、過剰な安全設備はないらしい。
一方でAudi/Bentzはドライバーを信用していない(というか、ドライバーは正常な判断が
できないことがある前提)ので、積極的に介入してくる、らしい。

私みたいなサンデードライバーにしてみれば、後者の方がありがたいのだけど。

で、perlはかなりBMW寄りで、(Cやasmは論外(リッターバイクみたいなもの)として)
Java/Pythonは結構Audi/Benz寄りなのかな、と。

ただ、この話はwindowsプラットフォーム限定っぽいので一概にそうとは言い切れないのだけど。

前置きが長くなったけど、
標準状態のwindows上のCpythonでstdoutにバイナリを投げられる(Yes/No)

答えはNo

まぁ、たいていの場合はミスをして(例:本来hexフォーマットで出すべきものが
そのまま出てしまう)いるケースなので、安全側に振っておくのは正しいのだろうけど。

この挙動を変えるには

import sys
if sys.platform=="win32":
import os, msvcrt
msvcrt.setmode(1,os.O_BINARY)

などという”おまじない”が必要だそうで。
そんなこと、書いてある本は少ないよね。

まぁ、意図的に標準出力にバイナリを出そうということ自体、ある種安全装置が
働く状況ではあるのは理解はしたうえで。
でも、安全装置はどうやれば外れるか、分かりやすく書いておいてほしいもんだ。