导读: python 构建命令行应用的第三方比较有名的包除了 click 之外还有一个叫 docopt, 这是一个以文档先行为目标的包. 个人是比较倾向于 Click 的, 看了这篇文章之后, 也很快写了一个 demo.
我对命令行很着迷.
我想为自己构建一个命令行应用程序, 有这个想法之后, 经过一番研究, 我发现 Python 自带的内置模块 argparse 是不够的.
然后, 我发现了Click模块. 所以, 今天, 我们将尝试使用 Python 和 Click 创建一个基本的应用程序.
安装
- $ pip install click
- Hello, World
让我们保持传统, 首先编写一个Hello,World, 将这个文件命名为 http://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!
现在就是这样, 从这里开始你就可以做很多事情了
来源: https://juejin.im/entry/5afe6d1df265da0b981bb1d6