我是使用paramiko通过sftp上传文件的方法,但我收到了这个错误。
ri @ ri-desktop:〜/ workspace / ssh $ python testssh.py
追溯(最近的呼叫最后):
文件“testssh.py”,第75行,中 if host_keys.has_key(hostname):
AttributeError:'HostKeys'对象没有属性'has_key'
这是我的test.py
中的代码hostkeytype = None
hostkey = None
files_copied = 0
try:
host_keys = paramiko.util.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))<br/>
except IOError:
try:
# try ~/ssh/ too, e.g. on windows
host_keys = paramiko.util.load_host_keys(os.path.expanduser('~/ssh/known_hosts'))
except IOError:
print '*** Unable to open host keys file'
host_keys = {}
if host_keys.has_key(hostname):
hostkeytype = host_keys[hostname].keys()[0]
hostkey = host_keys[hostname][hostkeytype]
print 'Using host key of type {0}'.format(hostkeytype)
答案 0 :(得分:2)
paramiko.util.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
paramiko.util.load_host_keys(os.path.expanduser('~/ssh/known_hosts'))
这些函数中的任何一个成功运行并返回一个没有has_key
属性的对象,或者你正在使用python 3,其中has_key
has been removed from dicts。
由于你使用的是python 2.x,问题应该是这些函数返回的内容没有has_key
属性
我查看了paramiko.util的源代码,事实上,util.load_host_keys
返回的不是字典,而是HostKeys object,它没有实现has_key()
,所以你无法在host_keys
对象上调用该函数
因为HostKeys类的docstring说明了这个
.HostKeys
对象可以像dict一样对待;任何字典查找都是 相当于调用lookup
。
你可以改用
if hostname in host_keys:
答案 1 :(得分:0)
通过添加以下代码来测试host_keys是否为字典:print type(host_keys)
之前if host_keys.has_key(hostname):
答案 2 :(得分:0)
您使用的是哪个版本的Python?因为has_key
已在3.xx中弃用:
移除。 dict.has_key() - 改为使用in运算符。