0

私は動作する次の呼び出しを持っています(実際には a を発生させますが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))

私の口述は私には良さそうです。

それにもかかわらず、最初の呼び出しは問題なく、エラーはソケット関連であるため、試しました

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

を発生させparamiko.SSHException: No authentication methods availableます。connectこれは、テストするパスワードやキーがないと解釈します。

dict をパラメーターとして受け入れるようにするにはどうすればよいですかssh.connect(または実際には、dict を私のものと比較する必要があります)。

または、パラメーター文字列を「手動で」作成する以外に、パラメーターを渡す別のpythonicの方法がありますか(文字列を連結することにより、私にはひどいように見えます)?

4

1 に答える 1

0

**ディクショナリは「アンパック」して、キーワード引数が関数呼び出しで使用して明示的に宣言されているかのように使用できます。次に例を示します。

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

位置引数が満たされ、 で重複しないように注意する必要がありますdict。例: 通常の関数呼び出しのルール...

于 2013-10-31T12:51:16.090 に答える