帕拉米科:传递一个字典作为连接的论据

时间:2013-10-31 12:38:30

标签: python paramiko

我有以下调用有效(实际上会引发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方法,而不是“手动”构建参数字符串(通过连接字符串,这看起来很糟糕)?

1 个答案:

答案 0 :(得分:0)

字典可以"解包"并且可以在函数调用中使用**显式声明关键字参数,例如:

ssh.connect('example.com', 22, **params)

你必须要小心,dict中的位置参数已经完成而不是重复,例如:正常函数调用的规则......