2016-04-09 12 views
2

Kürzlich entdeckte Klick und ich möchte eine nicht näher spezifizierte Anzahl von Kwarts an einen Klick-Befehl übergeben. Derzeit ist dies mein Kommando:Python Click Pass nicht angegebene Anzahl von Kwarts

@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) 

jedoch, wenn nargs etwas mehr als 1 geführt wird als Tupel ([docs] [1]) und ich kann nicht type=dict, die leider mit.

Aber es sollte möglich sein, so etwas zu tun:

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

Vielen Dank im Voraus für jede Hilfe oder Anregungen haben, in der Zwischenzeit halte ich an diese mich kratzen.

+1

dies helfen wird, Vielleicht: http://stackoverflow.com/questions/32944131/add-unspecified-options-to-cli-command-using-python-click –

+0

Awesome finden @ rmn – beardedeagle

Antwort

1

den Link verwenden, die bereitgestellt @rmn, schrieb ich meine Klickbefehl wie folgt:

@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) 

Was mich richtig den folgenden Befehl erteilen können:

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