私のPythonコード:
import sys
print "i am a daemon"
print "i will be run using nohup"
sys.stderr.write("i am an error message inside nohup process\n")
コードを実行すると、python a.py
次のように表示されます。
i am a daemon
i will be run using nohup
i am an error message inside nohup process
コードを実行すると、nohup python a.py > a.log 2>&1 < /dev/null &
a.logが表示されます。
i am an error message inside nohup process
i am a daemon
i will be run using nohup
stdoutログを使用するとstderrログがフラッシュ/記録されるのはなぜですかnohup
?
ベストアンサー1
私はそれが重要ではないと思いますnohup
。これにより同じ動作が発生しますpython a.py > a.log 2>&1
。
Pythonは内部的にCファイルstdioを使用する可能性が高いです。これにより、stdout
端末にいるときにラインバッファリングが発生し、stdout
ファイルのときにバッファリングが発生します。stderr
常にバッファリングされません。
stdout
ファイルにリダイレクトすると、stdout
バッファリングがラインバッファリングからバッファリングに切り替わり、print
ed文字列がバッファに入り、プログラム(ストリーム)が閉じられたときにのみフラッシュされます。ストリームはstderr
バッファリングされないため、ファイルに高速に転送されます。
stdbuf
adjustStandardBufferingを使用して、行を正しい順序で強制的に印刷できます。
stdbuf -o0 python a.py >a.log 2>&1