编写命令行工具-fire

命令行工具,即 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

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值