格式化ssh参数的字符串 - Python

时间:2013-10-01 21:42:28

标签: python string

这个问题可能很愚蠢,但我讨厌编程语言对我这么做......所以我有以下功能:

def udp_server(client=""):
    mutex.acquire()
    try:
        print "Starting server ... "
        server_process = subprocess.Popen("iperf.exe -s -u -i 1 -l 872",
                                          stderr=subprocess.STDOUT,
                                          stdout=subprocess.PIPE)
        print "Server started at ", server_process.pid
        print "Starting the client remotely on %s" % client
        cmd = "cd C:/performance/Iperf && python iperf_udp_client.py -c %s" % client
        client = paramiko.SSHClient()
        client.set_missing_host_key_policy(paramiko.WarningPolicy())
        client.connect(str(client), username=str(config['ssh_user']),
                       password=str(config['ssh_pwd']))
        stdin, stdout, stderr = client.exec_command(cmd)
        print stdout.readlines()
        server_process.kill()
    except Exception, e:
        print e
    finally:
        mutex.release()
加载函数时加载

config ...将值分配给mode.config文件,该文件很好地解析为config(我测试过它)

if __name__ == '__main__':
    config = {}
    execfile('C:\performance\mode.config', config)
    main()

当我将值硬编码到client.connect()时,它工作得很好,但是,当我尝试以正确的方式(使用配置文件,而不是硬编码)时,我得到以下错误:

Starting the client remotely on 123.456.795
getaddrinfo() argument 1 must be string or None

当然client是一个字符串:client = config['client']。有人可以帮帮我吗? Python版本为2.7.5

2 个答案:

答案 0 :(得分:4)

您正在使用client = config['client']覆盖client = paramiko.SSHClient()定义(这是您的想法)。重命名两个变量之一。

答案 1 :(得分:1)

您已将两个不同的变量命名为client:您要连接的客户端的主机名,以及您用于连接的SSHClient实例。

当你这样做时

client.connect(str(client), ...)

您实际上是在传递str的{​​{1}},而不是客户端的主机名。这将导致无法解析主机名(可能看起来像SSHClient)。

您可以通过重命名其中一个变量来解决此问题。例如,您可以调用主机名<SSHClient instance at 0xdeadbeef>而不是hostname