BLOGTIMES
2008/08/18

Pythonで出力をバッファさせない

  python 
このエントリーをはてなブックマークに追加

先日紹介した3行でできる、テスト用メールサーバを早速使い始めてみたましたが、これは予想以上に便利です。ただ、EHLOとか使えなかったりするので、意外と制限があるみたいです。

が、思わぬところではまってしまいました。

python testsmtp.py > smtp.log 2>&1 &

フォアグラウンドにすると、画面には通信結果が出力されてるのに上記のように、バックグランドで起動させて結果をログをファイルに書き出そうとすると、ログファイルには何も書かれずに空のままになってしまうのです。これだと、テスト用のメールサーバとしてはちょっと困ります。

しばらく悩みましたが、おそらく標準入出力がバッファされてるんだろうと思ってマニュアルを調べてみると-uというオプションがありました。

python -u testsmtp.py > smtp.log 2>&1 &

上記のようにオプションをつけると、リアルタイムにログが書き出されるようになりました。

python -h の結果

# python -h usage: python [option] ... [-c cmd | file | -] [arg] ... Options and arguments (and corresponding environment variables): -c cmd : program passed in as string (terminates option list) -d : debug output from parser (also PYTHONDEBUG=x) -E : ignore environment variables (such as PYTHONPATH) -h : print this help message and exit -i : inspect interactively after running script, (also PYTHONINSPECT=x) and force prompts, even if stdin does not appear to be a terminal -O : optimize generated bytecode (a tad; also PYTHONOPTIMIZE=x) -OO : remove doc-strings in addition to the -O optimizations -Q arg : division options: -Qold (default), -Qwarn, -Qwarnall, -Qnew -S : don't imply 'import site' on initialization -t : issue warnings about inconsistent tab usage (-tt: issue errors) -u : unbuffered binary stdout and stderr (also PYTHONUNBUFFERED=x) see man page for details on internal buffering relating to '-u' -v : verbose (trace import statements) (also PYTHONVERBOSE=x) -V : print the Python version number and exit -W arg : warning control (arg is action:message:category:module:lineno) -x : skip first line of source, allowing use of non-Unix forms of #!cmd file : program read from script file - : program read from stdin (default; interactive mode if a tty) arg ...: arguments passed to program in sys.argv[1:] Other environment variables: PYTHONSTARTUP: file executed on interactive startup (no default) PYTHONPATH : ':'-separated list of directories prefixed to the default module search path. The result is sys.path. PYTHONHOME : alternate <prefix> directory (or <prefix>:<exec_prefix>). The default module search path uses <prefix>/pythonX.X. PYTHONCASEOK : ignore case in 'import' statements (Windows).

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/2694
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン