這種情況與NFS,如果你已經安裝的NFS共享和服務器不再是網絡訪問經常發生的事情是任何IO訪問安裝只是卡住。如果你嘗試和運行在終端的LS,你會看到它只是卡住,不會失敗只是無休止地等待它永遠不會得到響應。因此,我建議你做的是在你的Python代碼運行ls,然後設置超時。一旦達到這個超時時間,你可能會引發異常。以下是我測試過的一個實現。 call_timeout是你給要執行的命令,並在幾秒鐘的超時時間的函數。如果命令超時之前完成它立即返回,否則就殺死它催生了過程,並提出了一個OSERROR可以捕獲。你可以選擇返回真或假,相反,它是一個設計選擇。下面還提供了一些示例調用。
代碼
from subprocess import Popen, check_output
import time
def call_timeout(cmd, timeout):
start = time.time()
p = Popen(cmd)
while time.time() - start < timeout:
if p.poll() is not None:
return
time.sleep(0.1)
p.kill()
raise OSError('command timed out')
調用示例
這應該沒有任何錯誤返回:
call_timeout(["sleep", "1"], 0.5)
這將提高OSERROR錯誤:
call_timeout(["sleep", "1"], 1.5)
你想要沿着這些路線的東西:
call_timeout(["ls", "/path/to/mountpoint"], 5.0)