Щелчок Python передает неопределенное количество kwargs

Недавно обнаруженный щелчок, и я хотел бы передать неопределенное количество kwargs команде щелчка. В настоящее время это моя команда:

@click.command()
@click.argument('tgt')
@click.argument('fun')
@click.argument('args', nargs=-1)
def runner(tgt, fun, args):
    req = pyaml.p(meh.PostAdapter(tgt, fun, *args))
    click.echo(req)

Однако при использовании nargs все, что больше 1, передается как кортеж ([docs][1]), и я не могу type=dict этого, к сожалению.

Но должна быть возможность сделать что-то вроде этого:

command positional1 positional2 foo='bar' baz='qux' xxx='yyy'

Заранее спасибо за любую помощь или предложения, а пока я буду продолжать откалывать это сам.


person beardedeagle    schedule 09.04.2016    source источник
comment
Возможно, это поможет: stackoverflow.com/questions/32944131/   -  person r-m-n    schedule 09.04.2016


Ответы (1)


Используя ссылку, предоставленную @rmn, я переписал свою команду щелчка следующим образом:

@click.command(context_settings=dict(
    ignore_unknown_options=True,
    allow_extra_args=True,
))
@click.pass_context
def runner(ctx, tgt, fun):
    d = dict()
    for item in ctx.args:
        d.update([item.split('=')])
    req = pyaml.p(meh.PostAdapter(tgt, fun, d))
    click.echo(req)

Что позволяет мне правильно выполнить следующую команду:

mycmd tgt fun foo='bar' baz='qux' xxx='yyy'

person beardedeagle    schedule 09.04.2016
comment
Я бы использовал понимание списка здесь: d = dict([item.strip('--').split('=') for item in ctx.args]) - person tupui; 09.12.2020