格式化命令调用字符串,包含多个选项

时间:2016-10-09 18:19:29

标签: python-3.x

我有一个函数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一次,并且只返回最后一个返回值。如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

这有帮助吗?

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)

顺便说一下,我建议您了解generator expressionsitertools。他们将你从厄运的金字塔中拯救出来。您的test_001函数中清晰可见反模式(大量网状循环和条件)(在当前版本的问题中编辑为无关紧要)。