使用多个选项格式化命令调用字符串



我有一个函数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函数中清晰可见(由于不相关,从当前版本的问题中编辑出来)。

最新更新