首页 > 解决方案 > Python - 在运行时传递变量

问题描述

我是 Python 新手,试图在运行时将一些变量传递给 Python 脚本文件,但出现错误。我试图对值进行硬编码,并且效果很好。

#!/usr/bin/python
import os
import sys

from getpass import getpass

import paramiko

def deploy_key(key, server, username, password):
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(server, username=userid, password=userpass)
    client.exec_command('mkdir -p ~/.ssh/')
    client.exec_command('echo "%s" > ~/.ssh/authorized_keys' % key)
    client.exec_command('chmod 644 ~/.ssh/authorized_keys')
    client.exec_command('chmod 700 ~/.ssh/')

key = open(os.path.expanduser('~/.ssh/id_test.pub')).read()
print(sys.argv[1])
userid=sys.argv[1]
print(sys.argv[2])
userpass=sys.argv[2]
print(sys.argv[3])
hosts=sys.argv[3]
for host in hosts:
    deploy_key(key, host, userid, userpass)

我的输入

python ssh_key.py root bssaadf 127.0.0.1

得到错误

  File "ssh_key.py", line 26, in <module>
    deploy_key(key, host, userid, userpass)
  File "ssh_key.py", line 12, in deploy_key
    client.connect(server, username=userid, password=userpass)
  File "/usr/lib/python2.7/site-packages/paramiko/client.py", line 305, in connect
    retry_on_signal(lambda: sock.connect(addr))
  File "/usr/lib/python2.7/site-packages/paramiko/util.py", line 269, in retry_on_signal
    return function()
  File "/usr/lib/python2.7/site-packages/paramiko/client.py", line 305, in <lambda>
    retry_on_signal(lambda: sock.connect(addr))
  File "/usr/lib64/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)

标签: python

解决方案


您正在读取hosts字符串,因此 for 循环遍历其字符(在每次迭代中,host都是不同的字符)。用作hosts参数 fordeploy_key应该可以正常工作。


推荐阅读