如何根据 Python 和 Click 要求 CLI 应用程序的选项

How require options for CLI app based on Python and Click

我正在使用 Python 和 Click 库构建一个 CLI 应用程序。

如何实现以下用例:

首先,我只希望子命令后跟一个参数,不需要任何选项:

$ myapp subcommand argument

这很简单。

但是如果设置了 argument2 还需要一些选项,我该如何编写代码呢?

$ myapp subcommand argument2 -o1 abc -o2 def

例如:

不需要选项:

$ ./myapp.py install basic

需要选项:

$ ./myapp.py install custom -o1 abc -o2 def

此外,我不知道如何选择参数,这意味着用户必须在“基本”或“自定义”之间进行选择。如果他选择“自定义”,他需要添加一些选项。

我通过让你的 argument2 成为 click.Command 成功地做到了这一点。 运行 通过下面的代码,我与 CLI 应用程序交互的主要方式是通过 cli 组。 cli 组有另一个组 install 添加为命令。所以我们有一个带有嵌套组的 CLI。 install 有 2 个命令,basiccustom,如您的示例所示。

basic 不带参数,而 custom 需要 2 个 Options.

调用如下所示:

❯ myapp install custom -o1 arg1 -o2 def
This is a custom install with option1: arg1 and option2: def

❯ myapp install basic
Executing a basic install

您可以看到嵌套组 install 在帮助消息中充当命令:

❯ myapp
Usage: myapp [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  install

如果您要调用 install,这就是您将获得的帮助输出。

❯ myapp install
Usage: myapp install [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  basic
  custom

这是代码:

import click


@click.group()
def cli():
    pass


@click.group()
def install():
    pass


@install.command()
def basic():
    print('Executing a basic install')


@install.command()
@click.option("-o1", "--option1", required=True)
@click.option("-o2", "--option2", required=True)
def custom(option1, option2):
    print(f'This is a custom install with option1: {option1} and option2: {option2}')


def main():
    cli.add_command(install)
    cli()


if __name__ == '__main__':
    main()