前言

本文不会从头教你如何使用 Click,因为 Click 官网上有着最为全面的资料,建议直接去官网学习,Click 的官网链接:https://click.palletsprojects.com/
建议在学习新的知识的时候优先查看其官网上的资料,官网上的资料往往是最全面的。
本文将对自己在使用 Click 创建命令行工具中遇到的一些疑惑或问题进行记录。
创建多层结构式的命令行应用
一个复杂命令行程序通常将会划分为不同的层级,举个栗子:Github CLI
$ gh --help
Work seamlessly with GitHub from the command line.
USAGE
gh <command> <subcommand> [flags]
CORE COMMANDS
gist: Create gists
issue: Manage issues
pr: Manage pull requests
release: Manage GitHub releases
repo: Create, clone, fork, and view repositories
在第一层中 gh
提供了五个命令,分别是 gist
、issue
、pr
、release
和 repo
,它们分别对应这不同的功能,在这五个核心的命令那个之下还有着更多的命令,如下:
$ gh gist --help
Work with GitHub gists.
USAGE
gh gist [flags]
CORE COMMANDS
create: Create a new gist
edit: Edit one of your gists
list: List your gists
view: View a gist
我们可以看到 gist
命令下也有子命令,分别是 create
、edit
、list
和 view
。
那么使用 Click 也可以创建这种多层结构式的命令行应用,代码如下:
import click
@click.group()
def cli():
pass
@click.group()
def command_1():
pass
@command_1.command()
def command_1_1():
click.echo('command-1-1')
@click.group()
def command_2():
pass
@command_2.command()
def command_2_1():
click.echo('command-2-1')
cli.add_command(command_1)
cli.add_command(command_2)
if __name__ == '__main__':
cli()
上述代码的输出如下:
$ python main.py
Usage: main.py [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
command-1
command-2
$ python main.py command-1
Usage: main.py command-1 [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
command-1-1
Click.Path 类型的默认值
Click 可以指定输入参数的类型,具体的文档可以查看相应的官方文档:https://click.palletsprojects.com/en/7.x/api/#types
其中如果将文件路径作为参数传递给命令行,可以使用 click.Path 作为其参数的类型,默认值可以设置为字符串类型,代码如下:
import click
@click.command()
@click.argument('file', default='./test.txt', type=click.Path())
def cat(file):
click.echo(open(file, 'r').read())
if __name__ == '__main__':
cat()
输出如下:
$ python main.py
Hello World
同时也可以使用 click 确保文件一定存在,代码为 @click.argument('file', default='./test.txt', type=click.Path(exists=True))
,这时必须保证默认的参数对应的文件也是存在的,否则程序就会排除异常。
网友评论