[英]Nohup is not writing log to output file
我正在使用以下命令在后台運行 python 腳本:
nohup ./cmd.py > cmd.log &
但似乎 nohup 沒有向日志文件寫入任何內容。 cmd.log 已創建但始終為空。 在 python 腳本中,我使用sys.stdout.write
而不是print
來打印到標准輸出。 我做錯了什么嗎?
您可以使用-u
標志運行 Python 以避免輸出緩沖:
nohup python -u ./cmd.py > cmd.log &
看起來您需要定期刷新標准輸出(例如sys.stdout.flush()
)。 在我的測試中,即使使用print
Python 也不會自動執行此操作,直到程序退出。
將-u
與nohup
一起使用對我nohup
。 使用-u
將強制stdout
、 stderr
流無緩沖。 它不會影響標准輸入。 一切都將保存在“ nohup.out ”文件中。 像這樣-
nohup python -u your_code.py &
您也可以將其保存到您的目錄中。 這條路-
nohup python -u your_code.py > your_directory/nohup.out &
此外,您可以使用PYTHONUNBUFFERED
。 如果將其設置為非空字符串,它將與-u
選項相同。 在運行 python 代碼之前使用這個運行下面的命令。
export PYTHONUNBUFFERED=1
要么
export PYTHONUNBUFFERED=TRUE
PS-我會建議使用像 cron-job 這樣的工具在后台運行和計划執行。
export PYTHONUNBUFFERED=1
nohup ./cmd.py > cmd.log &
要么
nohup python -u ./cmd.py > cmd.log &
Python 3.3 及更高版本有一個用於打印的刷新參數,這是唯一對我有用的方法。
print("number to train = " + str(num_train), flush=True)
print("Using {} evaluation batches".format(num_evals), flush=True)
我有一個類似的問題,但與 Python 進程無關。 我正在運行一個執行 nohup 的腳本,並且該腳本通過 cron 定期運行。
我能夠通過以下方式解決問題:
PS:我的腳本是用在 RHEL 上運行的 ksh 編寫的
我按以下方式運行我的腳本,我完全沒有問題:
nohup python my_script.py &> my_script.out &
與您的語法相比,您輸入后似乎只缺少一個“&”符號...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.