我有以下调用有效(实际上会引发paramiko.AuthenticationException
,这很好):
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('example.com',username='root', password="aaa", look_for_keys=False, timeout=5)
我想将参数转换为dict:
params = {
'hostname': 'example.com',
'port': 22,
'username': 'root',
'look_for_keys': False,
'timeout': 5
}
ssh.connect(params)
这会引发TypeError: getaddrinfo() argument 1 must be string or None
。我检查了ssh.connect
>>> inspect.getargspec(ssh.connect)
ArgSpec(args=['self', 'hostname', 'port', 'username', 'password', 'pkey', 'key_filename', 'timeout', 'allow_agent', 'look_for_keys', 'compress', 'sock'], varargs=None, keywords=None, defaults=(22, None, None, None, None, None, True, True, False, None))
我的dict看起来很好。
尽管如此,由于第一次调用很好并且错误与套接字相关,我尝试了
ssh.connect('example.com', 22, params)
引发paramiko.SSHException: No authentication methods available
。我将此解释为connect
没有任何密码或密钥可供测试。
我应该怎样做才能ssh.connect
接受dict作为参数(或者实际上 - dict与我的dict有什么不同)?
或者是否有另一种传递参数的pythonic方法,而不是“手动”构建参数字符串(通过连接字符串,这看起来很糟糕)?
答案 0 :(得分:0)
字典可以"解包"并且可以在函数调用中使用**
显式声明关键字参数,例如:
ssh.connect('example.com', 22, **params)
你必须要小心,dict
中的位置参数已经完成而不是重复,例如:正常函数调用的规则......