2016-08-12 3 views
1

出力がlessにパイプされていて、そのスクリプトをすべて一度ではなくlessに印刷したいと考えています。各印刷後に標準出力をフラッシュすることの含意

各印刷後にstdoutを(sys.stdout.flush()を介して)フラッシュすると、フラッシュは(明らかに)フラッシュされたときlessに表示されることがわかりました。

私の質問です:これに何か欠点はありますか?私のスクリプトには何十万もの行が印刷されていて、各行の後にがフラッシュされます。に問題がありますか?あなたがフラッシュするたびに表示するだけでなく、完全にバッファされた出力

+0

Pythonはすべてを自動的にフラッシュするように指示できます。私はあなたのコードを長くするのではなく、そのことを利用することを考えます。 –

+0

Pythonインタプリタの '-u'引数と' PYTHONUNBUFFERED'環境変数を参照してください。どちらもhttps://docs.python.org/2/using/cmdline.htmlに記載されています –

+0

@CharlesDuffyヒントをいただきありがとうございます。 – Jeeter

答えて

0

のアイデアを回避するために、余分なリソースを取るため

私の印象は基本的には、唯一の欠点は、それが潜在的に遅いということです、はいです。 stdinでのバッファリングは、プログラムが遅い物理I/Oより先に実行できるようにします。

しかし、あなたがそれをあまり送信しないと、とにかく人間のスピードで動作しています。違いはありません。

+1

ユーザがテーリングモードで 'less'を使用していない限り、ツールはユーザがスクロールダウンして見えるまですべてを印刷する必要はないので、プログラムを強制的に小さなもので' less'に書き込むことで総スループットが低下します。おそらくそれほどではないかもしれませんが、私はここで議論が行われているとは思えません(ユーザーに出力をスプールするプログラムの使用は、その出力をプログラムに書き込むスピードが問題であることを意味します)人間がすべての行を人間の速度で読み取るのではなく、エラー( '/'または類似の機能を使用して)で出力を検索するだけであれば、総スループットは重要です。 –

+0

多分、おそらく知覚的にさえそうではありません。 –

+1

すべてのもののように詳細に依存します。私はおそらく、もしあなたがsyncフラグでマウントされたファイルシステムにスプーリングしていたり​​、システムがすでに割り込み負荷の下で動き回っていたとしても、それが重要な病理学的事例を構築する可能性があります。 –

関連する問題