Как определить эту команду с помощью Python Click Framework? - PullRequest
0 голосов
/ 02 июля 2018

Я использую Python Click Framework для определения команд. Я хочу определить этот вид команды:

config bgp соседский узел_аддр подробно локальный_аддр as_number ...

например:

config bgp сосед 1.1.1.1 подробно 1.1.1.10 300 ...

Поэтому я использую такие коды:

#
# 'bgp' group
#

@cli.group()
def bgp():
    """BGP-related configuration tasks"""
    pass

#
# 'neighbor' subcommand
#
@bgp.command()
@click.pass_context
@click.argument('neighbor_addr', type=str, required=True)
def neighboraddr(neighbor_addr):
    """Config BGP neighbor infomations"""
    ctx.obj['NEIGHBOR_ADDR'] = neighbor_addr

# neighborinfo subcommand
@neighboraddr.command()
@click.pass_context
@click.argument('name', type=str, required=True)
@click.argument('local_peer_addr', metavar='<ipaddr_or_hostname>', required=True)
@click.argument('asn', type=int, required=True)
@click.argument('admin_status', type=str, required=False)
@click.argument('rrclient', type=int, required=False)
@click.argument('nhopself', type=int, required=False)
@click.argument('holdtime', type=int, required=False)
@click.argument('keepalive', type=int, required=False)
def neighborinfo(ctx, name, local_peer_addr, asn, admin_status, rrclient,
    nhopself, holdtime, keepalive):
    """Config BGP neighbor infomations details"""
    _config_bgp_neighbor_info(ctx.obj['NEIGHBOR_ADDR'], name, local_peer_addr, asn,
        admin_status, rrclient, nhopself, holdtime, keepalive)

Но я получил такие ошибки:

root @ switch1: ~ # config bgp neighboraddr 1.1.1.1 neighbourinfo? Traceback (последний вызов был последним): файл "/ usr / bin / config", строка 9, в load_entry_point ('sonic-utilities == 1.2', 'console_scripts', 'config') () Файл "/usr/lib/python2.7/dist-packages/click/core.py", линия 716, вызов вернуть self.main (* args, ** kwargs) Файл "/usr/lib/python2.7/dist-packages/click/core.py", строка 696, в main rv = self.invoke (ctx) Файл "/usr/lib/python2.7/dist-packages/click/core.py", строка 1060, в invoke вернуть _process_result (sub_ctx.command.invoke (sub_ctx)) файл "/usr/lib/python2.7/dist-packages/click/core.py", строка 1060, в invoke вернуть _process_result (sub_ctx.command.invoke (sub_ctx)) файл "/usr/lib/python2.7/dist-packages/click/core.py", строка 1057, в invoke Файл Command.invoke (self, ctx) "/usr/lib/python2.7/dist-packages/click/core.py", строка 889, в invoke вернуть файл ctx.invoke (self.callback, ** ctx.params) "/usr/lib/python2.7/dist-packages/click/core.py", строка 534, в invoke обратный обратный вызов (* args, ** kwargs) Файл "/usr/lib/python2.7/dist-packages/click/decorators.py", строка 17, в new_func return f (get_current_context (), * args, ** kwargs) TypeError: neighboraddr () получил несколько значений для аргумента ключевого слова 'Neighbor_addr'

Так как определить эту команду? спасибо ~

1 Ответ

0 голосов
/ 11 июля 2018

Вы пропустили ctx аргумент в команде neighboraddr.

@bgp.command()
@click.pass_context
@click.argument('neighbor_addr', type=str, required=True)
def neighboraddr(ctx, neighbor_addr):
    """Config BGP neighbor infomations"""
    ctx.obj['NEIGHBOR_ADDR'] = neighbor_addr
...