python нажмите, передав несколько значений ключа в качестве параметров - PullRequest
0 голосов
/ 30 марта 2020

Я использую python-click, и я хотел бы передать значения в таком формате, как этот

myprogram mycommand --parameter param1=value1 --parameter param2=value2

Я просматривал щелкните документацию по опциям , но не могу найти Конструкция, которая может помочь в этом, единственное решение, которое я могу найти, - это вызвать функцию callback и проверить, правильно ли построена строка <key>=<value>, а затем правильно определить значения.

Ничего плохого в этом решении, но мне было интересно, есть ли более элегантный способ справиться с этим, поскольку шаблон выглядит достаточно распространенным.

1 Ответ

0 голосов
/ 02 апреля 2020

Итак, у меня было go. Мне удалось сделать это следующими способами.

Во-первых, я попробовал это, хотя это не удовлетворяет критериям --parameter.

@click.command("test")
@click.argument("args", nargs=-1)
def test(args):
    args = dict([arg.split("=") for arg in args])
    print(args)

, поэтому при вызове вроде test param1=test1 param2=test вывод:

{'param1': 'test1', 'param2': 'test2' }

Во-вторых, я подумал о множественном варианте в сочетании с аргументом variadi c, который, кажется, ближе к вашим требованиям: test -p param1=test -p param2=test

@click.command("test")
@click.option('-p', '--parameter', multiple=True)
@click.argument("args", nargs=-1)
def test(*args, **kwargs):
    param_args = kwargs['parameter']
    param_args = dict([p.split('=') for p in param_args])
    print(param_args)


if __name__ == '__main__':
    test()

Вывод будет таким же, как и в предыдущем случае.

Если бы вы набрали print(kwargs['parameter']), вы бы получили

('param1=test', 'param2=test')

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

...