paramiko是否在非paramiko异常时关闭ssh连接?

18 人关注

我正在调试一些代码,这将导致我不断登录/退出一些外部sftp服务器。有谁知道,如果代码中出现非paramiko的异常,paramiko是否会自动关闭外部服务器上的ssh/sftp会话?我在文档中找不到,而且由于连接必须在每次迭代的早期进行,我不希望最后有20个开放的连接。

python
ssh
paramiko
Ben
Ben
发布于 2011-08-23
2 个回答
Todor Buyukliev
Todor Buyukliev
发布于 2011-11-28
已采纳
0 人赞同

SSHClient()可以作为一个上下文管理器使用,所以你可以做到

with SSHClient() as ssh:
   ssh.connect(...)
   ssh.exec_command(...)

而不是手动关闭。

mimo
这比 try: ... finally: ... 好多了!
如果在执行这个过程中抛出一些异常怎么办?
@runnerpaul 上下文管理器的设计正是为了处理这个问题。无论你如何离开那个块,无论是正常执行、 return 、执行,还是其他什么,连接都会被关闭。
这应该是公认的答案。替换代码0】的说法早在1977年就被提出来了。 PEP 343 以便剔除try/finally语句。
aculich
aculich
发布于 2011-11-28
0 人赞同

不,paramiko不会自动关闭ssh / sftp会话。异常是否由paramiko代码产生并不重要;paramiko代码中没有任何东西可以捕获任何异常并自动关闭它们,所以你必须自己做。

你可以通过把它包裹在一个try/finally块中来确保它被关闭,就像这样。

client = None
    client = SSHClient()
    client.load_system_host_keys()
    client.connect('ssh.example.com')