我试图从循环返回所有结果。输出只是来自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
我的预期结果是返回列表中设备的所有数据。
答案 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)