14

次のように、別のコマンドからパイプを介して入力を読み取ることができるpythonスクリプトを作成しています

batch_job | myparser

私のスクリプトは、独自の stdoutmyparserの出力と書き込みを処理します。batch_job私の問題は、出力をすぐに見たいことです (batch_job の出力は行ごとに処理されます) が、この悪名高い stdin バッファリング (おそらく 4KB、確認していません) がすべてを遅らせているようです。

この問題については、すでにここここで議論されています

私は次のことを試しました:

  • を使用して標準入力を開くos.fdopen(sys.stdin.fileno(), 'r', 0)
  • 私のハッシュバンでの使用-u#!/usr/bin/python -u
  • export PYTHONUNBUFFERED=1スクリプトを呼び出す直前の設定
  • 読み取られた各行の後に出力をフラッシュします(問題が入力バッファリングではなく出力バッファリングに起因する場合に備えて)

私のpythonバージョンは2.4.3です-追加のプログラムやパッケージをアップグレードまたはインストールする可能性はありません。これらの遅延を解消するにはどうすればよいですか?

4

3 に答える 3

0

Linux、bash では、探しているのは stdbuf コマンドのようです。

バッファリングが必要ない場合 (つまり、バッファリングされていないストリーム)、これを試してください。

# batch_job | stdbuf -o0 myparser

行のバッファリングが必要な場合は、これを試してください。

# batch_job | stdbuf -oL myparser
于 2018-09-18T15:26:34.270 に答える