当前位置: 首页 > 工具软件 > Click-pallets > 使用案例 >

[971]python命令行神器之Click

皮自明
2023-12-01

github:https://github.com/pallets/click

Click 是 Flask 的开发团队 Pallets 的另一款开源项目,它是用于快速创建命令行的第三方模块。

我们知道,Python 内置了一个 Argparse 的标准库用于创建命令行,但使用起来有些繁琐,Click 相比于 Argparse,就好比 requests 相比于 urllib

安装

pip install -U click

例子1

import click

@click.command()
@click.option("--count", default=1, help="Number of greetings.")
@click.option("--name", prompt="Your name", help="The person to greet.")
def hello(count, name):
    """Simple program that greets NAME for a total of COUNT times."""
    for _ in range(count):
        click.echo(f"Hello, {name}!")

if __name__ == '__main__':
    hello()

结果

$ python hello.py --count=3
Your name: Click
Hello, Click!
Hello, Click!
Hello, Click!

方法功能

  • command:用于装饰一个函数,使得该函数作为命令行的接口,例如上述装饰hello
  • option:用于装饰一个函数,主要功能是为命令行添加选项
  • echo:用于输出结果,由于print函数在2.x和3.x之间存在不同之处,为了更好的兼容性,因此提供了echo输出方法
  • Choice:输入为一个列表,列表中为选项可选择的值

把上述程序的帮助信息输出

$ python hello.py --help

Usage: hello.py [OPTIONS]

  Simple program that greets NAME for a total of COUNT times.

Options:
  --count INTEGER  Number of greetings.
  --name TEXT      The person to greet.
  --help           Show this message and exit.

其他属性描述

  • default:给命令行选项添加默认值
  • help:给命令行选项添加帮助信息
  • type:指定参数的数据类型,例如int、str、float
  • required:是否为必填选项,True为必填,False为非必填
  • prompt:当在命令行中没有输入相应的参数时,会根据 prompt 提示用户输入
  • nargs:指定命令行选项接收参数的个数,如果超过则会报错
  • metavar:如何在帮助页面表示值

group方法

Click还提供了group方法,该方法可以添加多个子命令,

import click
​
​
@click.group()
def first():
    print("hello world")
​
@click.command()
@click.option("--name", help="the name")
def second(name):
    print("this is second: {}".format(name))
​
@click.command()
def third():
    print("this is third")
​
first.add_command(second)
first.add_command(third)
​
first()

调用子命令second

$ python test.py second --name hh

# 输出
hello world
this is second: hh

密码输入

# 密码输入有两种方法
import click


@click.group()
def db():
    pass

# 方法1 :hide_input 隐式输入,confirmation_prompt:再次确认
@click.command()
@click.option('-p', prompt='请输入密码', hide_input=True, confirmation_prompt=True)
def inputp(p):
    """输入密码"""
    click.echo('p is %s' % p)

# 方法2: 我试了下,传参只能是password,其他的会报错
@click.command()
@click.password_option()
def inputp2(password):
    click.echo('p is %s' % password)

db.add_command(inputp)
db.add_command(inputp2)


if __name__ == '__main__':
    db()
# 运行如下
$ python hello.py --help
$ python3 hello.py inputp
$ python3 hello.py inputp2

参考:https://zhuanlan.zhihu.com/p/68337606
https://blog.csdn.net/weixin_38278993/article/details/100052961
https://www.jianshu.com/p/f6488f10febb

 类似资料: