Python 2.7 paramiko.ssh_exception.SSHException:没有现有会话

Python 2.7 paramiko.ssh_exception.SSHException:没有现有会话,python-2.7,paramiko,Python 2.7,Paramiko,我不了解paramiko模块的行为,您能帮我一下吗: 行为不正确的例子非常简单。我有两个模块: 用于导入的模块\u.py: 和第二个模块(仅包含一行导入) runner.py: 所以,当我尝试跑步时,魔术开始了 python2.7 runner.py 方法ssh.connect()中出现异常: 回溯(最近一次呼叫最后一次): 文件“E:/testing/runner.py”,第1行,在 从模块\u导入\u* 文件“E:\testing\module\u for\u importing.py”

我不了解paramiko模块的行为,您能帮我一下吗: 行为不正确的例子非常简单。我有两个模块:

用于导入的模块\u.py:
和第二个模块(仅包含一行导入)

runner.py:
所以,当我尝试跑步时,魔术开始了 python2.7 runner.py 方法ssh.connect()中出现异常:

回溯(最近一次呼叫最后一次):
文件“E:/testing/runner.py”,第1行,在
从模块\u导入\u*
文件“E:\testing\module\u for\u importing.py”,第13行,在
连接(_主机,用户名=_用户,密码=_密码,超时=_超时)
文件“C:\Python27\lib\site packages\paramiko\client.py”,第398行,在connect中
服务器密钥=t.获取远程服务器密钥()
文件“C:\Python27\lib\site packages\paramiko\transport.py”,第720行,在get_remote_server_key中
引发SShexException('没有现有会话')
paramiko.ssh_exception.SSHException:没有现有会话
但如果启动python模块: python2.7模块用于导入.py

一切正常

您能帮助我了解异常的根本原因吗?
对于python 3,没有任何错误。

要为ssh创建适当的对象:

import paramiko


class SSH(object):

    def __init__(self):
        pass

    def est_conn(self, ip, username, password):
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.WarningPolicy())
        ssh.connect(ip, username=username, password=password)
        print("Asserting that ssh connection has been established...")
        assert ssh

        return ssh

ssh = SSH()
然后在runner.py中使用:

from module_for_importing import ssh

希望这有帮助。

好的,创建SSH类,解决问题。但如果可能的话,请您解释一下当我启动包含导入模块的脚本时的情况,它引发了异常,但如果独立启动python模块,它工作正常吗?它与python如何导入模块有关吗?有一些规则吗?是的,它与python如何处理对象有关。您可能听说过“Python中的一切都是对象”的口号。虽然这是正确的,但在python中,类是对象的更高抽象。在您的代码中,您使用*从模块_导入所有内容,以用于_import.py,这意味着您已经将所有变量作为单独的对象导入。在我的代码中,我将所有这些变量包装到一个名为SSH的对象中,它的参数是SSH()对象的est_conn方法中代码中的所有变量。希望这个解释有帮助。@JonasM您的解决方案有帮助,谢谢!遗憾的是,我还是不明白你的解释。继承(对象的更高抽象)与模块失败有什么关系?我唯一的解释是,paramiko进入某个对象空间以获得ssh会话(作为子进程运行?),如果以“错误的方式”导入,会话将在其他地方结束。你能解释一下这里发生了什么吗?完全一样的问题!很奇怪!
Traceback (most recent call last):
  File "E:/testing/runner.py", line 1, in <module>
    from module_for_importing import *
  File "E:\testing\module_for_importing.py", line 13, in <module>
    ssh.connect(_host, username=_user, password=_password, timeout=_timeout)
  File "C:\Python27\lib\site-packages\paramiko\client.py", line 398, in connect
    server_key = t.get_remote_server_key()
  File "C:\Python27\lib\site-packages\paramiko\transport.py", line 720, in get_remote_server_key
    raise SSHException('No existing session')
paramiko.ssh_exception.SSHException: No existing session
import paramiko


class SSH(object):

    def __init__(self):
        pass

    def est_conn(self, ip, username, password):
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.WarningPolicy())
        ssh.connect(ip, username=username, password=password)
        print("Asserting that ssh connection has been established...")
        assert ssh

        return ssh

ssh = SSH()
from module_for_importing import ssh