Python命令行神器之Click

简介: 在Python开发和测试过程中主要有两种模式可以选择:脚本模式、命令行模式。在代码的开发和调试过程中使用脚本模式还是很方便的,尤其接触pycharm、eclipse这类强大的IDE,或者配合vs code这种综合的文本编辑器。但是如果使用纯文本编辑器,或者是在做整个系统开发时,与其他模型进行接口调用时,命令行模式就显得非常重要了。目前有很多热门的命令行工具,本文会一一介绍一下,并且重点介绍一下最近发现的一款命令行神器Click。

前言

命令行模式在Python开发中并不陌生,简单的说就是python hello_world.py这种使用命令的模式运行Python程序。目前比较主流的命令行工具主要有以下几项,

  • 内置的sys模块
  • argparse
  • tensorflow的Flags

当然,还有其他的,例如,Fire、Docopt,工具有很多,本文不在这里一一展开,概括性的讲解一下上述三款命令行工具,详细的阐述一下本文的重点Click,因为,相对而言这款工具实在太方便、太强大了。

sys模块

sys和os一样,是Python自带且非常常用的模块,该模块主要作用就是获取和Python解释器相关的一些信息,它的一个常见用途就是获取命令行参数,

import sys
def hello_world():
    print(sys.argv[1], sys.argv[2])
hello_world()
# 输出
$ python test.py 1 2
>>> 1 2

sys通过argv来获取命令行参数,其中argv[0]获取的是脚本的名称,从argv[1]开始获取的是命令行传入的参数。

argparse

argparse是用的非常多的一种命令行工具,它支持选项命名,指定数据类型,添加帮助信息,设置默认参数,功能非常全面而强大,因此非常受欢迎,

import argparse
arg = argparse.ArgumentParser("This is a test!")
def main(arg):
    print(arg.name)
    print(arg.age)
if __name__ == '__main__':
    arg.add_argument("--name", "-n", default="China", type=str, help="the name of your country.")
    arg.add_argument("--age", "-a", default=25, type=int, help="your age.")
    args = arg.parse_args()
    main(args)

可以查看帮助,

# 输出
$ python test.py --help
usage: This is a test! [-h] [--name NAME] [--age AGE]
optional arguments:
  -h, --help            show this help message and exit
  --name NAME, -n NAME  the name of your country.
  --age AGE, -a AGE     your age.

可以输入对应的参数,

$ python test.py --name Chinese --age 26
Chinese
26

也可以使用简写在命令行传入参数,

$ python test.py -n Chinese -a 26
Chinese
26

FLAGS

做深度学习相关方向,尤其经常使用tensorflow的应该对这个命令行工具比较熟悉,FLAGS是tensorflow提供的一款命令行工具,和大多数命令行工具大同小异,

import tensorflow as tf
FLAGS = tf.flags.FLAGS
tf.flags.DEFINE_string("train_path", '/voc2012/JPEG', "training file path")
tf.flags.DEFINE_integer("batch_size", 64, "training batch size")
tf.flags.DEFINE_float("lr", 0.01, "learning rate")
def main(_):
    print(FLAGS.train_path)
    print(FLAGS.batch_size)
    print(FLAGS.lr)
if __name__ == '__main__':
    tf.app.run()

查看帮助,

$ python test.py --help
# 输出
       USAGE: test.py [flags]
flags:
test.py:
  --batch_size: training batch size
    (default: '64')
    (an integer)
  --lr: learning rate
    (default: '0.01')
    (a number)
  --train_path: training file path
    (default: '/voc2012/JPEG')
Try --helpfull to get a list of all flags.

命令行传入参数,

$ python test.py --train_path /home/li/images --batch_size 128 --lr 0.001
# 输出
/home/li/images
128
0.001

Click

下面要介绍的就是本文的主角Click,这款工具是用flask的开发团队pallets进行开发,目前在github已经7.6k+star,受欢迎程度可见一斑,

9.jpg

Click的开发初衷就是使用最少的代码,以一种可组合的方式创建漂亮的命令行接口。它的目的是使编写命令行工具的过程快速而有趣,同时防止由于无法实现预期的CLI API而导致的任何问题。

Click主要有以下3个亮点:

  • 命令的任意嵌套
  • 自动帮助页面生成
  • 支持在运行时延迟加载子命令

安装

$ pip install click

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

首先先来一个例子,

import click
@click.command()
@click.option("--name", default="li", help="your name")
@click.option("--age", default=26, help="your age")
def hello_world(name, age):
    click.echo(name)
    print(age)
hello_world()

命令行调用,

$ python test.py --name ll --age 27
# 输出
ll
27

可以看出,上述主要用了click的3个方法,分别是,

  • command
  • option
  • echo

这3个方法在Click工具中至关重要,除此之外还有其他的方法,它们的功能分别是,

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

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

$ python test.py --help
Usage: test.py [OPTIONS]
Options:
  --name TEXT    your name
  --age INTEGER  your age
  --help         Show this message and exit.

在示例程序中,对于option只使用了default、help两个属性,除此之外option还有其他的属性选项,它们的功能如下,

属性 描述
default 给命令行选项添加默认值
help 给命令行选项添加帮助信息
type 指定参数的数据类型,例如int、str、float
required 是否为必填选项,True为必填,False为非必填
prompt 在命令行提示用户输入对应选项的信息
nargs 指定命令行选项接收参数的个数,如果超过则会报错

除此之外,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


相关文章
|
3月前
|
Shell 数据处理 开发者
|
3月前
|
测试技术 Python
python 命令行参数 argparse详解
这篇文章是关于Python命令行参数解析库`argparse`的详细解释和使用教程。文中提供了完整的代码模板,包括如何定义命令行参数、如何添加位置参数、可选参数和布尔参数,以及如何解析和使用这些参数。文章还包含了示例代码和测试用例,以展示如何在实际程序中应用`argparse`库。
40 0
|
3月前
|
Linux UED iOS开发
Python colorama 设置控制台、命令行输出彩色文字
Python colorama 设置控制台、命令行输出彩色文字
60 0
|
3月前
|
SQL 分布式计算 算法
【python】python指南(二):命令行参数解析器ArgumentParser
【python】python指南(二):命令行参数解析器ArgumentParser
44 0
|
3月前
|
并行计算 数据可视化 Shell
Day 2/100:命令行下执行python代码!
Day 2/100:命令行下执行python代码!
33 0
|
3月前
|
Python
python命令行解析模块argparse
python命令行解析模块argparse
|
4月前
|
Python
`cmd`模块是Python标准库中的一个模块,它提供了一个简单的框架来创建命令行解释器。
`cmd`模块是Python标准库中的一个模块,它提供了一个简单的框架来创建命令行解释器。
|
4月前
|
存储 Python 容器
`click`是一个用于构建命令行接口的Python包,它提供了简单、可组合的命令行解析器。
`click`是一个用于构建命令行接口的Python包,它提供了简单、可组合的命令行解析器。
|
5月前
|
Python
python命令行传递参数的两种方式
python在命令行运行.py文件时,如何在命令行传递参数给运行程序,python默认提供了sys模块的系统参数属性实现接收命令行中的外部参数。 另一种则是通过argparse模块实现的,argparse模块可以实现事先对命令行参数的初始化,更加的便于命令行参数的管理。
|
5月前
|
Python
Python命令行实现
Python命令行实现借助`click`模块,它提供了一种简单高效的方式来构建CLI应用。要开始,确保安装了`click`(`pip install click`)。基本示例是创建一个打印问候的程序,通过`@click.command()`和`@click.argument()`装饰器接收用户输入。`@click.option()`用于添加命令选项,而`@click.group()`则用于创建包含多个子命令的工具。通过组合参数和选项,可以构建更复杂的CLI应用。`click`的强大功能使得创建CLI变得轻松。
28 1