Python 命令行工具库 - fire 简介

人生苦短,我用python

目前Python命令行库有:argparse(Python标准库)、click,这些都是很好的工具库。但是这些库使用起来比较麻烦。本文要介绍的库Fire是一个比较简单的。按照官方的描述Fire库可以用于任何Python对象自动生成命令行接口。该工具库是谷歌在2017年3月22日宣布开源的。

简介

根据简单官方文档简单的翻译了一下:

1. python fire是在python中创建cli的一种简单方法。

2. python fire是开发和调试python代码的有用工具。

3. Python Fire有助于探索现有代码或将其他人的代码转换成CLI。

4. python fire使bash和python之间的转换更加容易。

5. python fire通过使用您将需要导入和创建的模块和变量设置repl,使使用pythonrepl变得更加容易。

安装

  1. pip安装:pip install fire
  2. conda安装:conda install fire -c conda-forge
  3. 源码安装: 克隆项目,运行:python setup.py install

基本使用

实例一、 单个函数使用

新建一个test.py 文件


# _*_ coding:utf-8 _*_
'''
@File       :   test.py
@TIME       :   2019/10/13 14:25:46
@Autho      :   ningbing
@Phone      :   15136220360
@Version    :   V1.0
@Email      :   [email protected]
@Desc       :   fire 库基本用法学习
'''

import fire
import random


def cutLength(leng, level):
    ''' 根据输入的level,将leng随机分割,输出一个数组,例如:参数level=3, leng=10, 输出:1,2,7'''
    res = []
    for i in range(level, 1, -1):
        res.append(random.randint(1, leng - sum(res) - i + 1))
    res.append(leng - sum(res))
    random.shuffle(res)
    return ', '.join(str(i) for i in res)


if __name__ == "__main__":
    fire.Fire(cutLength)

这个程序只有一个函数cutLength, 使用:fire.Fire(cutLength)来生成CLIs

在命令行输入:python test.py --help 来查看帮助信息

运行结果

上面我们可以了解到函数的基本信息

现在我们来试一下输入输入参数看看会不会达到我们想要的结果
命令行输入:

  1. python test.py 10 4
  2. python test.py --level 3 --leng 7
运行结果

实例二、多个函数:python 模块名 函数 参数

实例代码:

 # _*_ coding:utf-8 _*_
'''
@File       :   test.py
@TIME       :   2019/10/13 14:25:46
@Autho      :   ningbing
@Phone      :   15136220360
@Version    :   V1.0
@Email      :   [email protected]
@Desc       :   fire 库学习
'''

import fire
import random


def cutLength(leng, level):
    ''' 根据输入的level,将leng随机分割,输出一个数组,例如:参数level=3, leng=10, 输出:1,2,7'''
    res = []
    for i in range(level, 1, -1):
        res.append(random.randint(1, leng - sum(res) - i + 1))
    res.append(leng - sum(res))
    random.shuffle(res)

    return ', '.join(str(i) for i in res)


def sumleng(len_arr):
    ''' 将数组内的数相加 '''
    return sum(len_arr)


if __name__ == "__main__":
    fire.Fire()

这里我们只用了fire.Fire()。因为是多个方法,所以我们需要自主选择用哪个方法

我门不妨先输入:python test.py --help 看看帮助文档

运行结果

根据上面的文档我们看到synopsis 给出了参考实例,group和 command 由于我们代码中引入了random 所以会有group这个方法,随后会讲到,重点关注command 。同时下方也给出了commands的说明。

接下来测试下成果

命令行输入

  1. python test.py cutLength 10, 4
  2. python test.py sumleng 1,4,5,7
运行结果

我们可以看到fire会根据我们输入的方法名输出相应的结果

注意:在方法sumleng中我们参数接收的是数组,但是在命令行中不能直接输入数组,否则会报错,所以我们输入的是1,4,5,7 这样Fire函数自动会转为数组传递


实例三、python 模块名 函数 参数


# _*_ coding:utf-8 _*_
'''
@File       :   test.py
@TIME       :   2019/10/13 14:25:46
@Autho      :   ningbing
@Phone      :   15136220360
@Version    :   V1.0
@Email      :   [email protected]
@Desc       :   fire 库学习
'''

import fire
import random


class Arrdeal():
    def cutLength(self, leng, level):
        ''' 根据输入的level,将leng随机分割,输出一个数组,例如:参数level=3, leng=10, 输出:1,2,7'''
        res = []
        for i in range(level, 1, -1):
            res.append(random.randint(1, leng - sum(res) - i + 1))
        res.append(leng - sum(res))
        random.shuffle(res)
        return ', '.join(str(i) for i in res)

    def sumleng(self, len_arr):
        ''' 将数组内的数相加 '''
        return sum(len_arr)


if __name__ == "__main__":
    fire.Fire(Arrdeal)

有了上面的实例这个就很好理解了,我就不过多赘述了

直接看结果

命令行输入:

  1. python test.py cutLength 10 2
  2. python test.py sumleng 2,4,6,8
运行结果

结尾

通过这些实例我们发现,Fire确实比较方便实用,对核心代码没有任何入侵。使用比较简单。看来:谷歌出品,必属精品 所言非虚啊。

最后奉上Fire github地址:https://github.com/google/python-fire

你可能感兴趣的:(Python 命令行工具库 - fire 简介)