0

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

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是 String: client = config['client']。有人可以帮我吗?Python 版本是2.7.5.

4

2 回答 2

4

您正在client = config['client']client = paramiko.SSHClient(). 重命名两个变量之一。

于 2013-10-01T21:56:06.153 回答
1

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

当你这样做

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

您实际上是在传递 的strSSHClient而不是客户端的主机名。这将导致无法解析主机名(可能看起来像<SSHClient instance at 0xdeadbeef>)。

您可以通过重命名变量之一来解决此问题。例如,您可以调用主机名hostname而不是client.

于 2013-10-01T21:54:49.820 回答