简介
目前python命令行解析库用过的有:argparse(python自带)、click(Flask作者写的)
但二者相比fire这个库,用起来都不够 “简单”,fire一行代码能把函数导出到命令行窗口。
argparse用法示例
#
arg_test.py
import
argparse
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
import
click
@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
import
fire
def
foo(name):
return
‘
foo {name}!
‘.format(name=name)
def bar(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>)
可以指定某个函数导出到命令行
import
fire
def
foo(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个导出到命令行:
import
fire
def
add(x, y):
return x + y
def multiply(x, y):
return x * y
def subtract(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>)
还可以接收类的实例对象
import
fire
class
Calculator(object):
def
add(self, x, y):
return x + y
def multiply(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
原文:https://www.cnblogs.com/bigtreei/p/13260181.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!