我正在调试一些代码,这将导致我经常登录/退出一些外部sftp服务器。有谁知道如果代码中出现非paramiko异常,paramiko是否会自动关闭外部服务器上的ssh / sftp会话?我在文档中找不到它,并且由于必须在每次迭代的早期建立连接,我不想以20个开放连接结束。
ig9co6j11#
SSHClient()可以用作上下文管理器,因此您可以
with SSHClient() as ssh: ssh.connect(...) ssh.exec_command(...)
而不是手动关闭。
vhipe2zx2#
不,paramiko不会自动关闭ssh / sftp会话。不管异常是由paramiko代码还是其他代码生成的; paramiko代码中没有任何内容可以捕获任何异常并自动关闭它们,因此您必须自己完成。你可以通过将它 Package 在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()
bkkx9g8r3#
根据文件:https://docs.paramiko.org/en/stable/api/client.html#paramiko.client.SSHClient.close“(...)使用后未显式关闭客户端可能会导致进程结束挂起!“
3条答案
按热度按时间ig9co6j11#
SSHClient()可以用作上下文管理器,因此您可以
而不是手动关闭。
vhipe2zx2#
不,paramiko不会自动关闭ssh / sftp会话。不管异常是由paramiko代码还是其他代码生成的; paramiko代码中没有任何内容可以捕获任何异常并自动关闭它们,因此您必须自己完成。
你可以通过将它 Package 在try/finally块中来确保它被关闭,如下所示:
bkkx9g8r3#
根据文件:
https://docs.paramiko.org/en/stable/api/client.html#paramiko.client.SSHClient.close
“(...)使用后未显式关闭客户端可能会导致进程结束挂起!“