如何检测何时调用“--help”?
How do I detect when '--help' has been called?
我的 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
中应该足以解决这个问题,但是有谁知道 how/when '--help'
被传递了吗?因为使用此代码,ctx.args
每次都是空的。
为什么不使用 argparse ?它对CLI解析非常好。
如果 argparse 不是一个选项,那么:
if '--help' in sys.argv:
...
它是预构建的 - 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.
最近很忙才有时间读到这里
抱歉耽搁了
click
将传递给命令的参数存储在列表中。方法get_os_args()
returns这样的列表。您可以检查 --help
是否在该列表中以确定是否调用了 help
标志。类似于以下内容:
if '--help' in click.get_os_args():
pass
我的 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
中应该足以解决这个问题,但是有谁知道 how/when '--help'
被传递了吗?因为使用此代码,ctx.args
每次都是空的。
为什么不使用 argparse ?它对CLI解析非常好。
如果 argparse 不是一个选项,那么:
if '--help' in sys.argv:
...
它是预构建的 - 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.
最近很忙才有时间读到这里
抱歉耽搁了
click
将传递给命令的参数存储在列表中。方法get_os_args()
returns这样的列表。您可以检查 --help
是否在该列表中以确定是否调用了 help
标志。类似于以下内容:
if '--help' in click.get_os_args():
pass