python库fire使用简介

摘要:
简介目前python命令行解析库用过的有:argparse、click但二者相比fire这个库,用起来都不够“简单”,fire一行代码能把函数导出到命令行窗口。#也可以显示地先指定参数名,再跟参数值$pythonfiretest.pybar--namehellobarhello!'.formatif__name__=='__main__':fire.Fire运行:#调用方式:python[函数名][参数]$pythonfiretest.pyhellofoohello!fire.FireFire不仅可以接收函数,还可以接收字典对象作为参数,可在字典中配置那些函数需要导出到命令行中。

简介

目前python命令行解析库用过的有:argparse(python自带)、click(Flask作者写的)

但二者相比fire这个库,用起来都不够 “简单”,fire一行代码能把函数导出到命令行窗口。

argparse用法示例

#arg_test.py

importargparse

def counter(file_type=None):
    return {file_type: 100}

#初始化解析器
parser =argparse.ArgumentParser()
#定义参数
parser.add_argument("-f", "--file", help="统计指定文件类型")
#解析
args =parser.parse_args()
print(counter(args.file))

运行:

$ python arg_test.py -f python
{'python': 100}

click用法示例

#firetest.py

importclick

@click.command()
@click.option("-f", "--file", help="统计制定文件类型")
def counter(file=None):
    click.echo({file: 100})

if __name__ == '__main__':
    print(counter())

运行:

$ python firetest.py -f python
{u'python': 100}

fire安装

#pip安装:pip install fire#conda安装:conda install fire -c conda-forge#源码安装: git拿到代码,执行:python setup.py install

fire使用示例

通常:python [文件名] [函数名] [参数]

官方文档:https://github.com/google/python-fire/blob/master/docs/guide.md

fire.Fire()

直接在程序中调用 fire.Fire(),不需要修改目标函数,fire 会把当前模块下的所有对象导出到命令行中

#firetest.py

importfire

deffoo(name):
    return 'foo {name}!'.format(name=name)

defbar(name):
    return "bar {name}".format(name=name)

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

运行:

#调用方式:python [文件名] [函数名] [参数]

#函数名后面直接跟参数值
$ python firetest.py foo hello
foo hello!
#也可以显示地先指定参数名,再跟参数值
$ python firetest.py bar --name hello
bar hello!

fire.Fire(<function>)

可以指定某个函数导出到命令行

importfire

deffoo(name):
    return 'foo {name}!'.format(name=name)

if __name__ == '__main__':
    fire.Fire(foo)

运行:

#调用方式:python [函数名] [参数]
$ python firetest.py hello
foo hello!

当 Fire 接收函数 foo 作为参数时,只加载 foo 函数到命令行中,此时,在命令行中运行时也无需再指定函数名字,只需要指定参数就好。

fire.Fire(<dict>)

Fire 不仅可以接收函数,还可以接收字典对象作为参数,可在字典中配置那些函数需要导出到命令行中。

例如,有加减乘3个函数,我们可以选择性的选择其中2个导出到命令行:

importfire

defadd(x, y):
    return x +y

defmultiply(x, y):
    return x *y

defsubtract(x, y):
    return x -y

if __name__ == '__main__':
    fire.Fire({
        'add': add,
        'subtract': subtract,
    })

运行:

$ python firetest.py add 1 4
5$ python firetest.py subtract 1 4
-3$ python firetest.py multiply 1 4
#multiply 会报错,因为没有导出

fire.Fire(<object>)

还可以接收类的实例对象

importfire

classCalculator(object):

  defadd(self, x, y):
    return x +y

  defmultiply(self, x, y):
    return x *y

if __name__ == '__main__':
  calculator =Calculator()
  fire.Fire(calculator)

运行:

$ python firetest.py add 10 20
30$ python firetest.py multiply 10 20
200

参考文章:https://mp.weixin.qq.com/s/lMOieL_RFRHsh5OW4G4axg

免责声明:文章转载自《python库fire使用简介》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇centos 6.5环境利用iscsi搭建SAN网络存储服务及服务端target和客户端initiator配置详解linux命令统计文件中某个字符串出现的次数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python中常用的文件和目录操作(二)

一. os模块概述 python os模块提供了非常丰富的方法用来处理文件和目录 二. 导入os模块: import os 三. 常用方法 1. os.name 输出字符串表示正在使用的平台,如果是windows则用"nt"表示,如果是Linux/Unix,是"posix" import os print(os.name) 结果: nt...

python——多线程与线程锁

一、概念: 进程:对系统过来说,一个任务是一个进程; 线程:线程是包含在进程中。进程中,线程来工作,线程是最小的单位。一个进程可以启多个线程 二、进程和线程使用时的选择: 1.cpu密集型任务,用进程 #比如排序、计算的功能2.IO密集型任务,多线程 input Output #读写频繁,网络IO或者磁盘IO。浪费CPU比较少的用多线程3.如果需要读写也需...

使用Python操作Redis详解

之前的五天,过了个愉快的周末,然后将公司AbaseDump的调度部分代码看懂并且在此之上完成了OnlyDump的功能代码,代码不可以公开,今天完工,明天测试,晚上来总结一下这几天学到的一点应用。 使用Python操作Redis详解 ---------------------------------------------------------------...

《Spark Python API 官方文档中文版》 之 pyspark.sql (四)

摘要:在Spark开发中,由于需要用Python实现,发现API与Scala的略有不同,而Python API的中文资料相对很少。每次去查英文版API的说明相对比较慢,还是中文版比较容易get到所需,所以利用闲暇之余将官方文档翻译为中文版,并亲测Demo的代码。在此记录一下,希望对那些对Spark感兴趣和从事大数据开发的人员提供有价值的中文资料,对PyS...

Selenium---元素定位之CSS定位

CSS 选择器: 常见符号: #表示 id选择器 .表示 class选择器 >表示子元素,层级 一个空格也表示子元素,但是是所有的后代子元素,相当于 xpath 中的相对路径 一、css:属性定位 1.css可以通过元素的id、class、标签这三个常规属性直接定位到 2.如下是百度输入框的的html代码: <input type="text"...

解决 No module named 'airtest.core'

当前环境mac os 1、已pip install airtest 2、可以通过命令行运行 airtest的demo,但是使用pycharm 运行会提示No module named 'airtest.core' 3、当前pycharm 解释器已设置为 自己安装的python版本 4、在sitepackage 中可见 airtest的包,在pychram中...