我正在调试一些代码,这将导致我不断登录/退出某些外部sftp服务器。有没有人知道如果代码中引发了非paramiko异常,paramiko是否会自动关闭外部服务器上的ssh / sftp会话?我无法在文档中找到它,因为必须在每次迭代中尽早建立连接,我不希望最终得到20个开放连接。
答案 0 :(得分:17)
不,paramiko不会自动关闭ssh / sftp会话。如果异常是由paramiko代码生成的,则无关紧要; paramiko代码中没有任何内容可以捕获任何异常并自动关闭它们,因此您必须自己完成。
您可以通过将其包装在try / 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()
答案 1 :(得分:8)
SSHClient()可用作上下文管理器,因此您可以
with SSHClient() as ssh:
ssh.connect(...)
ssh.exec_command(...)
并且不会手动关闭。