Я использую 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'
Так как определить эту команду? спасибо ~