命令行工具,即 Cli(command-line interface)。是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。
Windows上的自带的命令行工具,就是我们最常接触的cmd
在python中,我们可以运用python的fire模块轻松编写命令行工具。fire会对当前对象结构进行暴露,将结构信息映射到shell命令行参数上。
简单书写一个函数,使用fire.Fire()命令暴露函数
#test_fire.py
import fire
def add(a,b):
return a+b
if __name__=='__main__':
fire.Fire(add)
可以使用python test_fire.py命令查看帮助信息(博主python环境命令是python3)
我们可以看到传给 fire.Fire()
的参数类型(function
)、文件路径、文档字符串、参数用法等信息。
接下来计算add
函数传参的时候也可以使用关键字传参。
此外,对于这种单个函数的情况,程序的最后一行 fire.Fire(cal_days)
可以改为 fire.Fire()
,结果完全一样,fire.Fire()
会默认使用 cal_days()
函数。
这就引入了下一个问题,多函数的fire.Fire()
多函数暴露
fire.Fire()
默认只有最后一个函数或对象生效
如果需要多个函数或类进行暴露,可以使用字典形式来传递函数和函数的简称
例如
import fire
def add(a,b):
return a+b
def multiply(a,b):
return a*b
if __name__=='__main__':
fire.Fire({
'add':add,
'multiply':multiply
})
输入键就调用了对应的函数,传递多个参数时用空格分隔
类与对象
暴露对象fire.Fire(class())
适用于无参数的类,或是在暴露时直接写定参数fire.Fire(class(a=1))
而暴露类fire.Fire(class)
需要在命令行调用时使用关键字传递进参数
例如
import fire
class F():
def __init__(self,coco):
self.coco=coco
def add(a,b):
return a+b
def multiply(a,b):
return a*b
if __name__=='__main__':
fire.Fire(F(coco=2)) #命令行输入python 文件名.py add 1 2
# or
# fire.Fire(F) 在命令行输入python 文件名.py add 1 2 --coco=2
简单的fire模块构建命令行工具就是这些,想要深入了解可以参考:
https://www.zhihu.com/question/280094723