所以我有一個腳本,它還沒有完全正常工作,但我希望它能夠一直試圖連接到服務器,直到它終於成功(使用paramiko庫)。在簡單的話來說,這就是我的代碼是這樣的:做'while while循環與try和except一起工作嗎?
canConnect = False
while canConnect == False:
try:
stdin, stdout, stderr = ssh.exec_command('ps')
if stdout.read():
canConnect = True
else:
# cannot connect
time.sleep(20)
except:
# cannot connect
time.sleep(20)
現在...這將是很基本的一個簡單的if語句,而是因爲我需要使用「try」和「除」變得更加複雜。如果代碼可以成功連接(使用「ps」作爲返回內容的隨機命令並證明服務器是可連接的),我假定它傳入if條件,然後將canConnect設置爲True並停止循環。如果它不能連接,我認爲Paramiko會拋出一個異常(爲了以防萬一,我把「else」命令放在那裏),但是一旦它碰到「except」,它應該等待20秒,然後我假定while語句將會採用代碼回到開始並重新開始?我目前見證的是一些類型的循環正在發生,但它實際上並沒有試圖連接到服務器。
此外,一個無關的問題,文檔是稀缺的,但我認爲Paramiko /有/需要3個參數執行一個exec_command(不管分配的變量,他們將採取標準輸出的In,Out,Err的順序? )?我還假設除了列表或方法調用外,將多個以逗號分隔的變量分配給類似的東西並不常見?
此代碼是否可用?你有錯誤嗎? – 2014-02-24 11:24:30
你的問題可能是因爲你的'except:'捕獲了任何可能出錯的東西;如果與網絡無關的'ssh.exec_command'行發生任何錯誤,則會出現無限循環。 – RemcoGerlich
'break','finally',你會得到更簡潔的代碼。 –