在 SLURM 集群中,我提交了一個調用 python 腳本的 shell 腳本(這兩個腳本都可以在下面找到。當 shell 腳本執行時,它會到達調用 python 腳本的位置,但隨后什么也沒有發生:沒有輸出,沒有錯誤消息SLURM 作業繼續運行。我假設 python 腳本的全部內容都不相關(但我還是將其包括在內以完成)。出于調試目的,我print("script started")在最開始插入了該行以查看它是否運行但沒有運行。我在輸出中看到的最后一件事是moved to directory.我嘗試在此之前調用test.py包含的腳本print("test")并且它正常執行。python 腳本無法啟動的原因可能是什么,我該如何解決?編輯:由于用戶 jakub 建議更改print("script started")為print("script started", flush=True)成功打印。包括更多這樣的語句表明腳本實際上運行得很好,只是沒有輸出任何東西。在不斷執行的 for 循環中包含相同的語句也會使print()之前丟失的所有語句都被打印出來。那么問題就變成了:為什么print()這里的語句需要在這個腳本中有flush=True,而在其他腳本中不需要呢?
1 回答

叮當貓咪
TA貢獻1776條經驗 獲得超12個贊
Python 默認緩沖 stdin、stdout 和 stderr。print()
默認情況下寫入stdout
,因此您將看到這種緩沖行為。
Python 以緩沖模式打開 stdin、-out 和 -error 流;它將讀取或寫入更大的塊,將數據保存在內存中,直到達到閾值。
您可以通過傳遞flush=True
給強行刷新此緩沖區print
。print
如果連續有多個語句,則只需flush=True
在最后一個語句中使用。
添加回答
舉報
0/150
提交
取消