Как я могу определить, когда был вызван '--help'? - PullRequest
1 голос
/ 03 июня 2019

Приложение My Click 7.0 имеет одну группу с несколькими командами, вызываемыми основной функцией cli следующим образом:

import click

@click.group()
@click.pass_context
def cli(ctx):
   "This is cli helptext"

    click.echo('cli called')
    click.echo('cli args: {0}'.format(ctx.args))

@cli.group(chain=True)
@click.option('-r', '--repeat', default=1, type=click.INT, help='repeat helptext')
@click.pass_context
def chainedgroup(ctx, repeat):
    "This is chainedgroup helptext"

    for _ in range(repeat):
        click.echo('chainedgroup called')
    click.echo('chainedgroup args: {0}'.format(ctx.args))

@chainedgroup.command()
@click.pass_context
def command1(ctx):
    "This is command1 helptext"

    print('command1 called')
    print('command1 args: {0}'.format(ctx.args))

@chainedgroup.command()
@click.pass_context
def command2(ctx):
    "This is command2 helptext"

    print('command2 called')
    print('command2 args: {0}'.format(ctx.args))

Пробег:

$ testcli --help
$ testcli chainedgroup --help
$ testcli chainedgroup command1 --help

Текст справки отображается должным образом, за исключением того, что родительские функции непреднамеренно выполняются в процессе. Одной условной проверки, чтобы увидеть, содержится ли '--help' в ctx.args, должно быть достаточно для решения этой проблемы, но кто-нибудь знает, как / когда передается '--help'? Потому что с этим кодом ctx.args пусто каждый раз.

Ответы [ 3 ]

2 голосов
/ 03 июня 2019

Если argparse не вариант, как насчет:

if '--help' in sys.argv:
...
0 голосов
/ 03 июня 2019

Это встроенный - Click выглядит как декоратор для argparse (Ура для здравого смысла).

import click

@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name',
              help='The person to greet.')
def hello(count, name):
    """Simple program that greets NAME for a total of COUNT times."""
    for x in range(count):
        click.echo('Hello %s!' % name)

if __name__ == '__main__':
    hello()

Так что вы можете написать

python cl.py --name bob

И см.

Привет Боб!

Помощь уже выполнена (как и argparse)

python cl.py --help
Usage: cl.py [OPTIONS]

  Simple program that greets NAME for a total of COUNT times.

Options:
  --count INTEGER  Number of greetings.
  --name TEXT      The person to greet.
  --help           Show this message and exit.

Занятый, только что успел прочесть это.

Извините за задержку

0 голосов
/ 03 июня 2019

Почему бы не использовать argparse?Отлично подходит для разбора CLI.

...