次のコマンドを使用して、バックグラウンドでPythonスクリプトを実行しています。
nohup ./cmd.py > cmd.log &
しかし、nohupはログファイルに何も書き込んでいないようです。cmd.logが作成されますが、常に空です。Pythonスクリプトでは、標準出力に出力するsys.stdout.write
代わりにを使用しています。print
私は何か間違ったことをしていますか?
-u
出力バッファリングを回避するフラグを使用して Python を実行できます。
nohup python -u ./cmd.py > cmd.log &
stdout を定期的にフラッシュする必要があるようです (例sys.stdout.flush()
)。print
私のテストでは、プログラムが終了するまで、Python は自動的にこれを行いません。
export PYTHONUNBUFFERED=1
nohup ./cmd.py > cmd.log &
また
nohup python -u ./cmd.py > cmd.log &
Python 3.3 以降には print へのフラッシュ引数があり、これが私にとって有効な唯一の方法です。
print("number to train = " + str(num_train), flush=True)
print("Using {} evaluation batches".format(num_evals), flush=True)