170

次のコマンドを使用して、バックグラウンドでPythonスクリプトを実行しています。

nohup ./cmd.py > cmd.log &

しかし、nohupはログファイルに何も書き込んでいないようです。cmd.logが作成されますが、常に空です。Pythonスクリプトでは、標準出力に出力するsys.stdout.write代わりにを使用しています。print私は何か間違ったことをしていますか?

4

7 に答える 7

466

-u出力バッファリングを回避するフラグを使用して Python を実行できます。

nohup python -u ./cmd.py > cmd.log &
于 2012-10-16T17:19:17.527 に答える
110

stdout を定期的にフラッシュする必要があるようです (例sys.stdout.flush())。print私のテストでは、プログラムが終了するまで、Python は自動的にこれを行いません。

于 2012-10-16T17:17:11.660 に答える
20
export PYTHONUNBUFFERED=1
nohup ./cmd.py > cmd.log &

また

nohup python -u ./cmd.py > cmd.log &

https://docs.python.org/2/using/cmdline.html#cmdoption-u

于 2017-04-09T07:21:37.120 に答える
3

Python 3.3 以降には print へのフラッシュ引数があり、これが私にとって有効な唯一の方法です。

print("number to train = " + str(num_train), flush=True)
print("Using {} evaluation batches".format(num_evals), flush=True)
于 2018-05-24T03:09:07.367 に答える