print
またはstderr
のいずれかに特長や欠点がありますか?print vs stderr
答えて
これは2つの異なるものです。 print
は、一般にsys.stdout
に行きます。 stdin
, stdout
, and stderr
の違いを知ることは価値があります - 彼らはすべてその用途があります。 は、通常のプログラム出力にはstdout
を、エラーメッセージ(プログラムの異常実行)にはstderr
を予約する必要があります。これらのストリームを分割するユーティリティがあり、コードのユーザは通常の出力とエラーを区別できます。
print
は、sys.stderr
を含むファイル形式のオブジェクトに印刷できます。代わりにsys.stdout
のエラーsys.stderr
を使用しての
print >> sys.stderr, 'Text'
利点は以下のとおりです。
- ファイルにstdoutをリダイレクトするユーザーが、彼女はまだ画面上のエラーを見ている場合。
- バッファされていないため、
sys.stderr
をログファイルにリダイレクトすると、エラーが記録される前にプログラムがクラッシュする可能性が少なくなります。
心の中ではPython 2と書かれたこの答え。 Python 3の場合は、代わりにprint('Text', file=sys.stderr)
を使用してください。
+1。すばらしいです!私はこの「印刷物」の性質を知らなかった – db42
注意:ストリームがインタラクティブデバイスに送信されるかどうかなど、いくつかの微妙な点があります。最大の驚きは、Python 3ではstderrが(少なくともUnixでは)バッファリングされていることです。例えば、端末ウィンドウで、次のは、Python 2で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)
非常に興味深い。私はなぜ彼らがPython 3でそのルートに行くことを決めたのだろうか? –
端末にバッファリングされた行で、ファイルに書き込むときに完全にバッファされます。 :(FAIL。 –
スクリプトを実行する際にstderrとstdoutを別々のファイルにリダイレクトすることで分離すると便利です。私は通常、ログメッセージとプログラムの流れを追跡するためにstderrを使いますが、後でそれらを使うつもりのより有用なメッセージのためにstdoutを使います。
つstderrに書き込むための別の方法は、以下の例の通りである:
import sys
sys.stderr.write("Error has occurred opening a file!")
クール!:) log = sys.stderr.write; log( "hello") – AME
- 1. gdb print ptr vs print "%s"で混乱しています
- 2. pythonでは、print関数の出力をstderrにリダイレクトできますか?
- 3. Rubyで$ stderrとSTDERRを使用するのはいつですか?
- 4. subprocess.popen()stderrリダイレクション(パイプあり)
- 5. Pythonでジェネレータのstderrにプリント
- 6. pythonでのprint()とprintの違い2.7.10
- 7. pretty print
- 8. VSコードは入力後にpython printコマンドを処理しません
- 9. stderrリダイレクト方法
- 10. ABAP StdoutとStderr
- 11. PHPのエコーとprint文
- 12. パイプコマンド "stderr"コマンドにFind
- 13. python log stderrをファイル
- 14. fancybox IFrame print
- 15. python - pretty print errorbars
- 16. Return to print return
- 17. Python print(end = "")エラー
- 18. JasperReports Print Empty PDF
- 19. Primefaces printer print div
- 20. Perl print $(^ b)
- 21. print php session username
- 22. OCaml Print statements
- 23. Print Screen Issue
- 24. Jquery Maphilight Print Issue
- 25. javascript print link
- 26. print文は
- 27. stdout、stderr、stdout + stderrを同期して保存します
- 28. python subprocess.Popen(コマンド、stderr = subprocess.PIPE、stdout = subprocess.PIPE)のstderrをキャプチャします。
- 29. bashがログにSTDOUT + STDERR、通常の宛先にSTDERRが必要
- 30. ksh特定のステートメントに対するstderr
も有用であり得る、その標準エラーがバッファリングされていないことに注意します。 – JimB
"プログラムの出力"を "非テキストまたは非ステータスのプログラム出力"に置き換える答えの文言を微調整しました。 stderrは、すべての場合にエラーメッセージ用に予約するべきではありません。たとえば、stdoutにダウンロードするプログラムは別のプログラムにパイプされますが、ダウンロードの進行状況はstderrに出力されます。 –
@JimBどのような意味で? – JinSnow