美文网首页
使用 Click 创建自己的命令行工具

使用 Click 创建自己的命令行工具

作者: 火星殖民计划负责人 | 来源:发表于2020-11-05 22:45 被阅读0次

前言

image.png

本文不会从头教你如何使用 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 提供了五个命令,分别是 gistissueprreleaserepo ,它们分别对应这不同的功能,在这五个核心的命令那个之下还有着更多的命令,如下:

$ 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 命令下也有子命令,分别是 createeditlistview

那么使用 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)),这时必须保证默认的参数对应的文件也是存在的,否则程序就会排除异常。

相关文章

网友评论

      本文标题:使用 Click 创建自己的命令行工具

      本文链接:https://www.haomeiwen.com/subject/jmtzvktx.html