python,在for循环中,我只能使用我的最后一个元素进行迭代

时间:2018-08-06 08:54:29

标签: python-2.7

我有一个包含服务器列表的字典:

{'server1':'RHEL 6.8','server2':'RHEL 6.8','server3':'RHEL 6.8','server4':'RHEL 6.8'}

我想在每个节点上启动一个hostname命令(这是类上的方法)。

ssh连接:

def ssh(self, cl_name, cmd):
    try:
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(self.cl_name, timeout=2)
        stdin, stdout, stderr = ssh.exec_command(cmd)

        out = stdout.read()
        return out
    except (paramiko.ssh_exception.SSHException, socket.error, paramiko.ssh_exception.AuthenticationException, socket.gaierror):
        print "server DOWN"
        return False

这是应该在每个节点上运行hostname命令的方法:

def get_load(self):
    for k in self.get_cluster_nodes().keys():
        print k
        cmd = "hostname"
        print self.ssh(k, cmd).rstrip()

这是输出:

server1(示例:打印k) server4(示例:打印self.ssh(k,cmd).rstrip())

server2 server4

server3 server4

server4 server4

我在python 2.7上工作。

1 个答案:

答案 0 :(得分:0)

看到您的输出,一切似乎都很好。

您使用的是self.cl_name而不是cl_name,它是函数的参数(在这种情况下为k)。 我认为您是从对象中调用该方法的,该对象的属性cl_name设置为server4

旧:
尽管似乎hostname命令的输出对于每台服务器都是相同的,但是您是否尝试过手动连接到每台服务器并运行hostname
如果这样做,问题可能出在其他地方,例如服务器IP值不正确或其他问题。