从python 3中的for循环返回所有输出

时间:2019-05-14 21:48:30

标签: python

我试图从循环返回所有结果。输出只是来自Cisco设备的基本show命令的数据字符串。两种设备都可以很好地打印输出,但是当我返回for循环时,我只能从列表中的最后一个设备获得输出。

我在for循环的顶部尝试了字典列表,但是我猜输出是字符串,因此它不接受信息。

    # Juniper Normalize the data for command line interface
    juniper_command = '"({})"'.format('|'.join(src_a + src_p + dst_a + dst_p))
    # Device IP list
    fw_a = ['10.90.2.20', '10.90.1.10']

    try:
        result = ()
        for ip in fw_a:
            if "true" in str(p_show):
                device = {"device_type": "juniper_junos", "username": username, "host": ip, "password": password}
                connection = netmiko.ConnectHandler(**device)
                connection.find_prompt(delay_factor=2)
                time.sleep(1)
                connection.enable()
                resp = connection.send_command(
                    'show configuration | display xml | match ' + str(juniper_command), delay_factor=2)
                print(ip + '\n' + resp)
                result = resp

        return result

我的预期结果是返回列表中设备的所有数据。

2 个答案:

答案 0 :(得分:1)

每次循环时,您都会调用result = resp,它会用result覆盖resp的值。因此,在循环结束时,result的值就是上一次循环中resp的值。

如果您想从每次循环迭代中获取resp的所有值的列表,可以将result设为列表(使用result = []而不是{ {1}}),然后不用说result = (),而是说result = resp

编辑:看起来您需要返回一个元组,因此,正如汉斯在评论中所提到的,您可以使用result.append(resp)return tuple(result)

答案 1 :(得分:0)

感谢ChocolateAndChees的所有帮助。 我通过在循环顶部添加结果= []来解决此问题 然后result.append(resp) 然后返回str(result)