如何检测何时调用了“ --help”?

时间:2019-06-03 01:59:15

标签: python command-line-interface python-click

我的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每次都是空的。

4 个答案:

答案 0 :(得分:2)

如果argparse不是一个选项,怎么办:

if '--help' in sys.argv:
...

答案 1 :(得分:0)

click将传递给命令的参数存储在列表中。方法get_os_args()返回这样的列表。您可以检查--help是否在该列表中,以确定是否调用了help标志。类似于以下内容:

if '--help' in click.get_os_args():
    pass

答案 2 :(得分:-1)

为什么不使用argparse?它具有出色的CLI解析功能。

答案 3 :(得分:-1)

它是预构建的-单击看起来像是argparse(常识为Hurrah)的装饰器。

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.

以前很忙,才有时间阅读。

很抱歉延迟