我正在嘗試在服務器上遠程運行腳本,我打算使用以下內容:
nohup ./script.py > runtime.out 2> runtime.err &并使用tail -f runtiime.out. 我遇到的問題是重定向似乎沒有按預期作業。就我的問題而言,我的問題可以按如下所述重現:
腳本.py:
#!/usr/bin/env python3
import time
if __name__=='__main__':
for i in range(1000):
print("hi")
time.sleep(1)
然后在 shell 中運行./print.py > a.out &。這將給出行程的 PID 并將按預期退出。a.out盡管程式正在運行,但還是空的。此外,如果我./print.py > a.out 不使用“&”,則a.out檔案保持為空,直到我按 Ctrl-C 命令。然后它顯示所有預期的輸出,直到腳本終止。
我認為“>”不僅在命令完成時不斷重定向stdout和stderr。
uj5u.com熱心網友回復:
使用print("hi", flush=True)將繼續強制流重繪 內容,因此它將不斷更新輸出檔案。我沒有足夠的關于你的程式的資訊來建議替代方案,但如果可能的話,我會尋找更好的方法。
uj5u.com熱心網友回復:
最簡單的方法就是使用命令的-u標志python。它應該是這樣的:
nohup python3 -u script.py > runtime.out 2> runtime.err &
根據python3 --help:
-u :強制 stdout 和 stderr 流無緩沖;此選項對標準輸入沒有影響;還有 PYTHONUNBUFFERED=x
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/397181.html
下一篇:如何獲取awk列印函式名稱和注釋
