Py学习  »  Python

使用 Python 和 Click 编写命令行应用程序

一个普普通通简简单单平平凡凡的神 • 6 年前 • 374 次点击  
导读:python 构建命令行应用的第三方比较有名的包除了 click 之外还有一个叫 docopt,这是一个以文档先行为目标的包。个人是比较倾向于 Click 的,看了这篇文章之后,也很快写了一个 demo。

我对命令行很着迷。

我想为自己构建一个命令行应用程序,有这个想法之后,经过一番研究,我发现 Python 自带的内置模块 argparse 是不够的。

然后,我发现了「Click」模块。所以,今天,我们将尝试使用 Python 和 Click 创建一个基本的应用程序。

安装

$ pip install click

Hello, World

让我们保持传统,首先编写一个「Hello,World」,将这个文件命名为 cli.py

import click

@click.command()
def hello():
    click.echo('Hello World!')

click.echo() 向给定的文件或标准输出打印一条消息外加一个换行符,初看起来,这很像 print函数,但它改进了对处理 Unicode 和二进制数据的支持。

command 装饰器将函数转换成一个可以被调用的命令:

if __name__ == '__main__':
    hello()

调用时是这样的:

$ python hello.py
Hello World!

对应的帮助信息是这样的:

$ python hello.py --help
Usage: hello.py [OPTIONS]

Options:
  --help  Show this message and exit.

参数

目前,我们没有太多的计划工作,让我们给它添加一些参数。

import click

@click.command()
@click.argument('name')
def hello(name):
    click.echo(f"Hello, {name}!")

if __name__ == '__main__':
    hello()

运行:

$ python cli.py Anshul
Hello, Anshul!

如果没有参数,运行:

$ python cli.py
Usage: cli.py [OPTIONS] NAME

Error: Missing argument "name".

选项

顾名思义,这些是选项,不同于我们上面看到的参数,选项是可选的,不是强制性的。

import click

@click.command()
@click.option('--count', default=1, help="Number of greetings.")
@click.argument('name')
def hello(count, name):
    for i in range(count):
        click.echo(f"Hello, {name}!")

if __name__ == '__main__':
    hello()

运行:

$ python cli.py Anshul --count 3
Hello, Anshul!
Hello, Anshul!
Hello, Anshul!

布尔 flags

有一些选项不需要任何值,他们只是 flag(即标识)。例如 --help 命令,它并不需要一个值,另一个可能在使用 cli 工具时会注意到的例子是 --version。

import click

@click.command()
@click.option('--flag', is_flag=True)
def hello(flag):
    if flag:
        click.echo("Our flag will sail high and above!")
    else:
        click.echo("Well, that didn't go as planned!")

if __name__ == '__main__':
    hello()

运行:

$ python cli.py
Well, that didn't go as planned!

$ python cli.py --flag
Our flag will sail high and above!

现在就是这样,从这里开始你就可以做很多事情了

原文: How to write a command-line application using Python and Click

扩展阅读:

极光日报,极光开发者旗下媒体。
每天导读三篇英文技术文章。

今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/Jj5M3Xs9U8
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/12157
 
374 次点击