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

叮當(dāng)貓咪
TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊
Python 默認(rèn)緩沖 stdin、stdout 和 stderr。print()
默認(rèn)情況下寫入stdout
,因此您將看到這種緩沖行為。
Python 以緩沖模式打開 stdin、-out 和 -error 流;它將讀取或?qū)懭敫蟮膲K,將數(shù)據(jù)保存在內(nèi)存中,直到達(dá)到閾值。
您可以通過傳遞flush=True
給強(qiáng)行刷新此緩沖區(qū)print
。print
如果連續(xù)有多個(gè)語句,則只需flush=True
在最后一個(gè)語句中使用。
添加回答
舉報(bào)
0/150
提交
取消