Ne paramiko étroite connexion ssh sur un non-paramiko exception
Je suis le débogage du code, qui est le résultat de moi en permanence logging in /out de certains serveurs sftp. Personne ne sait si paramiko se ferme automatiquement un ssh /sftp session sur le serveur externe si un non-paramiko exception est levée dans le code? Je ne le trouve pas dans les docs et les connexions doivent être faites assez tôt dans chaque itération je ne veux pas de fin jusqu'à 20 connexions ouvertes.
OriginalL'auteur Ben | 2011-08-23
Vous devez vous connecter pour publier un commentaire.
Non, paramiko ne sera pas automatiquement la fermeture de la ssh /sftp session. Il n'a pas d'importance si l'exception a été générée par paramiko code ou autrement; il n'y a rien dans le paramiko code qui récupère toutes les exceptions et se ferme automatiquement, de sorte que vous avez à faire vous-même.
Vous pouvez vous assurer qu'il obtient fermée en l'enveloppant dans un try/finally bloc comme suit:
subprocess
ouos
etc lorsque quelque chose va mal ailleurs. Je suppose que je pourrais mettre unclient.close()
dans chaque exception, mais ce n'est pas très jolie.Si vous mettez les appels à
subprocess
ouos
à l'intérieur de latry
bloquer ensuite lefinally
bloc sera toujours peu importe ce qui a généré une exception. Si vous voulez qu'il soit un peu plus joli, alors vous pourriez vouloir envelopper client dans unContext Manager
et l'utilisation de lawith
déclaration. docs.python.org/reference/datamodel.html#context-managersCe monsieur est un point donc +1! Ne pas répondre à la question et il y a peu de point de mettre chaque chose individuelle, dans un
try ... finally
bloc si tous enfin sont pas les mêmes. Mais, il n'y a rien de mal à mettre de l'appel à la classe à l'intérieur alors j'ai toujours le fermer proprement.Comment au sujet de l'affichage du code (ou une version simplifiée de celui-ci) et ensuite, il serait plus facile de dire exactement ce que vous devez faire pour ne pas se retrouver avec 20 connexions ouvertes.
J'ai édité ma réponse pour répondre à votre question plus précisément... non, la connexion n'est pas automatiquement fermé par paramiko peu importe où l'exception a été générée.
OriginalL'auteur aculich
SSHClient() peut être utilisé comme un gestionnaire de contexte, de sorte que vous pouvez faire
et ne pas fermer manuellement.
OriginalL'auteur Todor Buyukliev