我有一个函数ping
,需要传递格式的字符串ping mpls ipv4 <ip here> <param name> <valiue> <param name> <valiue> ...
到试验台设备的方法
def ping(device, ip_address, **kwargs):
options = ['destination', 'dsmap', 'exp', 'fec-type', 'flags', 'force-explicit', 'interval', 'output', 'pad', 'repeat', 'reply', 'session', 'size', 'source', 'sweep', 'timeout', 'ttl', 'verbose']
for key, value in kwargs.items():
if key in options:
cmd ="ping mpls ipv4 {0} {1} {2}".format(ip_address, key, value)
output = device.execute(cmd)
return output
使用例子:
ping(device, ip, size='100', interval='10', sweep='100 1500 100')
device
为试验台设备,ip
为IPv4 IP字符串。
问题在于它为我指定的每个关键字参数调用一次device.execute
,并且只返回最后一个返回值。如何解决这个问题?
这有帮助吗?
valid_options = ('{} {}'.format(key, value)
for key, value in kwargs.items()
if key in options)
cmd_options = ' '.join(valid_options)
cmd = 'ping mpls ipv4 {} {}'.foramt(ip_address, cmd_options)
顺便说一句,我建议你学习生成器表达式和itertools。它们可以将您从"厄运金字塔"反模式(大量网络循环和条件)中拯救出来,这些反模式在test_001
函数中清晰可见(由于不相关,从当前版本的问题中编辑出来)。