pythonメモ  pythonw.exeの注意点

ご存知の方も多いと思いますが、今日、はまってしまったのでメモしておきます。
ソースコード中にprint文を書いて、変数の値とかを出力している場合、の注意点です。

このメモはWindows環境でpythonw.exeでスクリプトを起動した場合に発生します。

現象としては、

python.exeではちゃんと動いていた。(.py, .pyc)
・pythonw.exeで起動して使用していると、いきなり固まったりする。(.pyw)

です。

調べたところ、原因としては

pythonw.exeで起動した場合の標準出力、エラー出力は4096byte以上出力できない。

というものがありました。

回避方法としては

(1) stdout, stderrを自作のものにリダイレクトする
(2) カスタマイズした出力関数を作成して、Windows環境でpythonw.exeによって起動している場合には
 なにも出力しないようにする。

でしょうかね。。。他にもあるかもしれませんけど。

私の場合、(2)にしました。


sys.platformでwin32かどうかを調べて、sys.executableからインタプリタの名前を取得してpythonw.exeだったら何もしない。といった感じです。