出力バッファリングを無効にする 質問する

出力バッファリングを無効にする 質問する

Python のインタープリターでは、出力バッファリングはデフォルトで有効になっていますかsys.stdout?

答えが「はい」の場合、それを無効にする方法は何ですか?

これまでの提案:

  1. -uコマンドラインスイッチを使用する
  2. sys.stdout書き込みのたびにフラッシュするオブジェクトでラップする
  3. PYTHONUNBUFFERED環境変数を設定する
  4. sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)

sys実行中にプログラムでグローバル フラグを設定する他の方法はありますかsys.stdout?


特定の書き込み後にフラッシュしたい場合はprint印刷関数の出力をフラッシュするにはどうすればよいですか?

ベストアンサー1

からMagnus Lycka のメーリングリストでの回答:

python -u環境変数 PYTHONUNBUFFERED を使用するか設定することで、Python プロセス全体のバッファリングをスキップできます。

また、sys.stdout を、呼び出しのたびにフラッシュを実行するラッパーのような他のストリームに置き換えることもできます。

class Unbuffered(object):
   def __init__(self, stream):
       self.stream = stream
   def write(self, data):
       self.stream.write(data)
       self.stream.flush()
   def writelines(self, datas):
       self.stream.writelines(datas)
       self.stream.flush()
   def __getattr__(self, attr):
       return getattr(self.stream, attr)

import sys
sys.stdout = Unbuffered(sys.stdout)
print 'Hello'

おすすめ記事