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)
などという”おまじない”が必要だそうで。
そんなこと、書いてある本は少ないよね。
まぁ、意図的に標準出力にバイナリを出そうということ自体、ある種安全装置が
働く状況ではあるのは理解はしたうえで。
でも、安全装置はどうやれば外れるか、分かりやすく書いておいてほしいもんだ。