原点:
今日は、arcfaceのトレーニングコードを見ていました。shell[script](https://www.zalou.cn/tag/jiaoben)でpythonコマンドを実行した後、-uパラメーター(python -u xx.py)を追加したので、このパラメーターについて少し調べました。
知識を準備する
インターネット上の[program](https://www.zalou.cn/tag/chengxu)の例を使用して、pythonでの標準エラー(std.err)と標準出力(std.out)の出力ルールを示します(標準出力は画面に出力する前にデフォルトでキャッシュする必要がありますが、標準エラーは画面に直接印刷):
import sys
sys.stdout.write("stdout1")
sys.stderr.write("stderr1")
sys.stdout.write("stdout2")
sys.stderr.write("stderr2")
その中で、sys.stdout.write()とsys.stderr.write()は、画面に出力するステートメントです。実際、pythonのprintステートメントはsys.stdout.write()を呼び出します。たとえば、printオブジェクトがprint objを呼び出すと、実際にはsys.stdout.write(obj + 'n')が呼び出されます。
期待される結果は
stdout1stderr1stdout2stderr2
実際の結果はです
stderr1stderr2stdout1stdout2
その理由は、pythonキャッシュメカニズムです。デフォルトでは、stderrとstdoutの両方が画面を指しますが、stderrはキャッシュされません。[プログラム](https://www.zalou.cn/tag/chengxu)はstderrに文字を出力し、stdoutがキャッシュされている間、1文字が画面に表示されます。 、改行が発生した場合、または一定のサイズに蓄積された場合にのみ表示されます。これが、上記で最初に2つのstderrが表示される理由です。
- uパラメータの使用
上記の予兆を使用して、pythonの-uパラメーターを導出できます。 pythonコマンドと-u(バッファなし)パラメータは、標準エラーと同様に、標準出力をバッファリングせずに画面に直接出力するように強制します。
運用結果
stdout1stderr1stdout2stderr2
これが期待される出力になります。
**注:**上記の結果はpython2で実装されています。また、python3でもテストしました。Python3で-uまたは環境変数UNBUFFERED = 1を使用しても、stdoutはキャッシュを書き込みます(実行結果stderr1stderr2stdout1stdout2)、具体的な理由は定かではありませんので、確認の上更新させていただきます。
上記の分析から、特にpython実行[script](https://www.zalou.cn/tag/jiaoben)が画面に出力され、結果がログファイルに直接リダイレクトされる場合、-uパラメータが使用されるため、標準の出力結果が直接に出力されることを確認するのは難しくありません。ログファイル。
pythonコマンドの-uパラメーターの上記の詳細な説明は、エディターによって共有されるコンテンツ全体です。参照を提供したいと思います。[website](https://www.zalou.cn/tag/wangzhan)(zalou.cn)をサポートできることを願っています。
Recommended Posts