Python命令行神器之Click 快速入门

查看原文Python命令行神器之Click 快速入门

Python自研工具,在调度或测试中,重要的两种模式:脚本模式、命令行模式。尤其接触pycharm、eclipse这类强大的IDE,或者配合vs code这种综合的文本编辑器。但提供给使用者,命令行模式就显得非常重要了,目前有很多热门的命令行工具,觉得最好用的就是本文的主角:Click.

命令行模式在Python开发中并不陌生,简单的说就是python hello_world.py这种使用命令的模式运行Python程序。

常用的命令行工具主要有以下几项:

内置的sys
argparse
tensorflow的Flags
getopt
当然还有很多,命令行工具中用起来最爽的就是 Click,只要很少的代码就可以优雅地创造一个命令行工具,它致力于将创建命令行工具的过程变的快速而有趣。

前言

click是用 Python 写的一个第三方模块,用于快速创建命令行。我们知道,Python 内置了一个 Argparse 的标准库用于创建命令行,但使用起来有些繁琐,Click 相比于 Argparse,就好比 requests 相比于 urllib。

Click主要有以下3个亮点:
- 命令的任意嵌套
- 自动帮助页面生成
- 支持在运行时延迟加载子命令

安装

$ pip install click

Click支持Python 3.4和更新版本、Python 2.7和PyPy。

快速使用

Click 的使用大致有两个步骤:
    1.使用 @click.command() 装饰一个函数,使之成为命令行接口;
    2.使用 @click.option() 等装饰函数,为其添加命令行选项等。
快速创建一个简单的demo
创建 click_demo.py ,写一个最简单的函数
import click

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

if __name__ == '__main__':
     hello()
运行:
    python click_demo.py
    Hello World!

注:装饰器 click.command() 使函数秒变命令行工具,echo 函数的作用等同于 print 函数。
参数

option常用的设置参数如下:
default: 设置命令行参数的默认值
help: 给命令行选项添加帮助信息
type: 参数类型,例 string, int, float 等
prompt: 当在命令行中没有输入相应的参数时,会根据 prompt 提示用户输入
required:是否为必填选项,True为必填,False为非必填
nargs: 指定命令行参数接收的值的个数
指定Type,默认值default,多选项multiple

不同于多值选项是通过一个选项指定多个值,多选项则是使用多个相同选项分别指定值,通过 click.option 中的 multiple=True 来实现

import click

@click.command()
@click.option("--count",-c”, default=1, help="打印次数", type=int) # 指定 count 是 int 类型
@click.option('--message', '-m', multiple=True)
def hello(count):
  """
  一个简单示例
  """
  for i in range(count,message):
      click.echo('Hello World!')
      click.echo('\n'.join(message))

if __name__ == '__main__':
  hello()

–count:count是参数的名字

default :参数的默认值

type:给参数指定类型

help:说明文档

执行脚本的时候后面加上参数 --help 就可以查看说明文档。

$ python click_demo.py --help

Usage: click_demo.py [OPTIONS]

这是一个简单示例

Options:
-c, --count INTEGER 打印次数
--help       Show this message and exit.

指定参数运行:

>python click_demo.py --count 3

Hello World!
Hello World!
Hello World!
>python click_demo.py     #存在默认值,直接运行
Hello World!
>python click_demo.py -m foo -m bar --message baz

提示选项prompt

有些命令行工具在运行的时候要求用户输入信息,比如需输入用户、密码等,可以给 option 装饰器指定 prompt 参数,其中在输入密码的时候,我们希望能隐藏显示。option 提供了两个参数来设置密码的输入:用于隐藏输入【hide_input】和用于重复输入【confirmation_promt】。

import click

@click.command()
@click.option("--count","-c", default=1, help="打印次数", type=int)
@click.option("--name","n", prompt="请输入用户名", help="用户名")
@click.option("--pass","p", prompt=True, hide_input=True, confirmation_prompt=True)
@click.password_option() #此种是简写,可替换上面写法
def hello(count, name, pass):
  """
  一个简单示例
  """
  for i in range(count):
      click.echo(f'Hello {name}!')
      click.echo('password: %s' % password)

if __name__ == '__main__':
  hello()

运行:

$ python click_demo.py

请输入用户名: lzjun
Hello lzjun!
Password:                         # 不会显示密码
Repeat for confirmation:         # 重复一遍
password: 666666

可选值click.Choice,required

在某些情况下,一个参数的值只能是某些可选的值,如果用户输入了其他值,我们应该提示用户输入正确的值。在这种情况下,我们可以通过 click.Choice() 来限定:

import click

@click.command()
@click.option('-c',required=True,type=click.Choice(['start','stop']))  
#限定-c的值为start,或者stop,required表示是否为必填参数
def click_choice(c):
  click.echo('command is %s' % c )

if __name__ == '__main__':
  click_choice()

运行:

$ python click_choice.py
Usage: click_choice.py [OPTIONS]
Try "click_choice.py --help" for help.

Error: Missing option "-c". Choose from:
start,
stop.
$ python click_choice.py -c stop
command is stop

多值参数nargs

如一个参数需要接收多个值。option 支持设置固定长度的参数值,通过 nargs指定。

import click

@click.command()
@click.option('--center', nargs=2, type=float, help='center of the circle')
@click.option('--radius', type=float, help='radius of the circle')
def circle(center, radius):
  click.echo('center: %s, radius: %s' % (center, radius))

if __name__ == '__main__':
  circle()

运行:

$ python click_multi_values.py --center 3 4 --radius 10
center: (3.0, 4.0), radius: 10.0

$ python click_multi_values.py --center 3 4 5 --radius 10
Usage: click_multi_values.py [OPTIONS]

Error: Got unexpected extra argument (5)

以上了解后也就初步掌握了 click 的简单用法,并了解到它与 argparse和 docopt 的不同。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值