前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[971]python命令行神器之Click

[971]python命令行神器之Click

作者头像
周小董
发布2021-05-11 10:43:19
7151
发布2021-05-11 10:43:19
举报
文章被收录于专栏:python前行者python前行者

文章目录

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

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

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

安装

代码语言:javascript
复制
pip install -U click

例子1

代码语言:javascript
复制
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()

结果

代码语言:javascript
复制
$ 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:输入为一个列表,列表中为选项可选择的值

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

代码语言:javascript
复制
$ 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方法,该方法可以添加多个子命令,

代码语言:javascript
复制
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

代码语言:javascript
复制
$ python test.py second --name hh

# 输出
hello world
this is second: hh

密码输入

代码语言:javascript
复制
# 密码输入有两种方法
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()
代码语言:javascript
复制
# 运行如下
$ 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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-05-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 安装
  • 例子1
  • 方法功能
  • 其他属性描述
  • group方法
  • 密码输入
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档