人生苦短,我用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变得更加容易。

安装

pip安装:pip install fire

conda安装:conda install fire -c conda-forge

源码安装: 克隆项目,运行: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 : 823825804@qq.com
@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 来查看帮助信息

运行结果
上面我们可以了解到函数的基本信息
现在我们来试一下输入输入参数看看会不会达到我们想要的结果
命令行输入:
python test.py 10 4
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 : 823825804@qq.com
@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的说明。
接下来测试下成果
命令行输入
python test.py cutLength 10, 4
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 : 823825804@qq.com
@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)
有了上面的实例这个就很好理解了,我就不过多赘述了
直接看结果
命令行输入:
python test.py cutLength 10 2
python test.py sumleng 2,4,6,8


运行结果

结尾

通过这些实例我们发现,Fire确实比较方便实用,对核心代码没有任何入侵。使用比较简单。