28

またはのいずれかに特定の長所または短所はありますprintstderr

4

4 に答える 4

86

printを含む任意のファイルのようなオブジェクトに印刷できますsys.stderr

print >> sys.stderr, 'Text'

sys.stderr代わりにエラーに使用する利点は次のsys.stdoutとおりです。

  • ユーザーがstdoutをファイルにリダイレクトした場合でも、画面にエラーが表示されます。
  • バッファリングされないため、sys.stderrがログファイルにリダイレクトされると、エラーがログに記録される前にプログラムがクラッシュする可能性が低くなります。

この答えはPython2を念頭に置いて書かれています。Python 3の場合は、print('Text', file=sys.stderr)代わりに使用してください。

于 2009-06-02T14:31:45.210 に答える
34

それらは2つの異なるものです。print通常はに行きsys.stdoutます。、、、の違いを知っておく価値がstdinありstdoutますstderr-それらはすべて用途があります。

特に、stdout通常のプログラム出力に使用するstderr必要がありますが、エラーメッセージ(異常なプログラム実行)にのみ予約する必要があります。これらのストリームを分割するためのユーティリティがあります。これにより、コードのユーザーは通常の出力とエラーを区別できます。

于 2009-06-02T14:29:35.510 に答える
31

注意:ここには、ストリームがインタラクティブデバイスに送られるかどうかなど、微妙な点がいくつかあります。最大の驚きは、Python 3ではstderrが(少なくともUnixでは)行バッファリングされていることです。たとえば、ターミナルウィンドウで、Python2では2秒ごとに数値を出力します。

for n in range(5):
    print >> sys.stderr, n,     # final comma to squelch newline character
    time.sleep(2)

一方、Python 3では、ループが終了すると、次のように数値がすべて一緒に出力されます。

for n in range(5):
    print(n, file=sys.stderr, end='')    # print n to sys.stderr with no newline char
    time.sleep(2)
于 2010-03-09T17:33:44.310 に答える
2

スクリプトを実行するときに、stderrとstdoutを別のファイルにリダイレクトして、それらを分離すると便利です。私は通常、ログメッセージとプログラムのフローを追跡するためにstderrを使用しますが、後で使用する予定のより有用なメッセージにはstdoutを使用します。

stderrに書き込むもう1つの方法は、次の例です。

import sys
sys.stderr.write("Error has occurred opening a file!")
于 2013-05-16T16:16:23.353 に答える