1. ホーム
  2. python

[解決済み] 出力バッファリング無効化

2022-03-16 21:09:44

質問

Python のインタプリタでは、出力バッファリングはデフォルトで sys.stdout ?

もし答えが肯定的なら、それを無効にするすべての方法は何ですか?

これまでの提案

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

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

解決方法は?

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

バッファリングをスキップすることができます。 python プロセスは "python -u" を使ってください。 (または#!/usr/bin/env python -u など)または 環境変数 pythonunbufferedです。

また、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'