我正在調試一些代碼,這將導致我不斷登錄/退出某些外部sftp服務器。有誰知道如果paramiko自動關閉外部服務器上的ssh/sftp會話,如果在代碼中引發了非paramiko異常?我無法在文檔中找到它,並且由於每次迭代都必須儘早完成連接,因此我不想以20個打開的連接結束連接。paramiko關閉ssh連接上一個非paramiko例外
9
A
回答
15
不,paramiko不會自動關閉ssh/sftp會話。如果例外由paramiko編碼或其他方式產生,這並不重要; paramiko代碼中沒有捕獲任何異常並自動關閉它們,所以你必須自己做。
可以確保它被封閉在一個嘗試它包裹/ finally塊,像這樣:
client = None
try:
client = SSHClient()
client.load_system_host_keys()
client.connect('ssh.example.com')
stdin, stdout, stderr = client.exec_command('ls -l')
finally:
if client:
client.close()
3
SSHClient()可以作爲一個上下文管理器,所以你可以做
with SSHClient() as ssh:
ssh.connect(...)
ssh.exec_command(...)
而不是手動關閉。
相關問題
- 1. Paramiko SSH隧道關閉問題
- 2. 通過paramiko(SSH)連接到多個主機是非常慢
- 3. Paramiko連接時不詢問SSH密鑰
- 4. Paramiko連接問題
- 5. 連接從一個SSH會話中的paramiko遠程主機
- 6. Paramiko SSHException頻道關閉
- 7. Python - PARAMIKO SSH close session
- 8. Python Paramiko/SSH錯誤
- 9. Paramiko關閉連接時發出的問題
- 10. 以編程方式關閉Paramiko中的SSH隧道
- 11. 與Paramiko設置virtualenv SSH
- 12. ssh客戶端與paramiko
- 13. Paramiko/ssh/tail + grep掛起
- 14. 發送輸入上的paramiko蟒SSH
- 15. Python,Paramiko:如何使用paramiko做「ssh -n user @ host cmd」?
- 16. 的paramiko無法打開,即使load_system_host_keys ssh連接+ WarningPolicy
- 17. 無法將SSH與paramiko連接到谷歌計算引擎實例
- 18. paramiko sftp服務器連接丟失
- 19. 使用Paramiko連接網絡設備
- 20. 嘗試連接ec2設備時paramiko EOFError
- 21. 用paramiko防止SFTP/SSH會話超時
- 22. Paramiko SSH執行命令被卡在session.recv_exit_status()
- 23. Python ssh paramiko檢測失敗的命令
- 24. SSH與Paramiko:無法讀取數據
- 25. 從遠程卡住的paramiko ssh註銷
- 26. Paramiko爲SSH思科UCSM失敗
- 27. 無法使用的paramiko SSH客戶端
- 28. 的web2py的paramiko與對SSH功能
- 29. 如何更改Paramiko SSH Banner /版本?
- 30. SSH客戶端的paramiko(蟒蛇)
謝謝你,問題是我正在調試幾千行代碼(並且仍在添加它)。 paramiko沒有提出例外情況,但在其他地方出現問題時,可以通過「subprocess」或「os」等方式說明。我想我可以在每個異常中都放置一個'client.close()',但這不是很漂亮。 – Ben
如果你將調用放在'try'塊內的'subprocess'或'os',那麼無論產生什麼異常,總是會調用finally子塊。如果你想讓它變得更漂亮,那麼你可能想要將客戶端包裝在一個'Context Manager'中並使用'with'語句。 http://docs.python.org/reference/datamodel.html#context-managers – aculich
這位先生是一個點,所以+1!不回答這個問題,並且如果所有的終端都是相同的,那麼把每個單獨的東西放在'try ... finally'塊中是沒有意義的。但是,把呼叫放到一個班級裏面沒什麼問題,所以我總是很乾淨地關閉它。 – Ben