python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python Fire

Python Fire中两种命令行参数灵活设置方式详解

作者:databook

Python的Fire库,一个用来生成命令行工具的的库,这篇文章主要针对命令行参数,补充两种更加灵活的设置方式,感兴趣的小伙伴可以跟随小编一起学习一下

前段时间,介绍过PythonFire库,一个用来生成命令行工具的的库。

请参考:Python Fire:自动生成命令行接口

今天,针对命令行参数,补充两种更加灵活的设置方式。

1. *args 型参数

*args型的参数可以接受任意长度的参数。

比如,模拟一个学校发送通知的功能:

import fire

def notions(school, *names):
    for name in names:
        print(f"[{school} 通知] hello {name}")


if __name__ == "__main__":
    fire.Fire(notions)

使用起来很灵活,

$  python.exe .\fire-sample.py NJ大学 小红 小李 小张 小华
[NJ大学 通知] hello 小红
[NJ大学 通知] hello 小李
[NJ大学 通知] hello 小张
[NJ大学 通知] hello 小华

$  python.exe .\fire-sample.py --school NJ大学 小红 小李 小张
[NJ大学 通知] hello 小红
[NJ大学 通知] hello 小李
[NJ大学 通知] hello 小张

$  python.exe .\fire-sample.py --school NJ大学 小红 小李 小张 小华
[NJ大学 通知] hello 小红
[NJ大学 通知] hello 小李
[NJ大学 通知] hello 小张
[NJ大学 通知] hello 小华

$  python.exe .\fire-sample.py 小红 小李 --school NJ大学 小张 小华
[NJ大学 通知] hello 小红
[NJ大学 通知] hello 小李
[NJ大学 通知] hello 小张
[NJ大学 通知] hello 小华

从上面使用的示例可看出,

2. **kwargs 型参数

**kwargs 型参数也是不定长度的,和*args型参数不同的地方在于,

使用**kwargs型参数时,需要指定参数名称

比如,模拟一个显示学生成绩的功能:

import fire

def scores(cls, **students):
    for k, v in students.items():
        print(f"[{cls} 成绩] {k}: {v}")


if __name__ == "__main__":
    fire.Fire(scores)

使用示例如下:

$  python .\fire-sample.py 初三1班 --小红 98 --小李 89 --小王 100
[初三1班 成绩] 小红: 98
[初三1班 成绩] 小李: 89
[初三1班 成绩] 小王: 100

$  python .\fire-sample.py --小红 98 --小李 89 --小王 100  初三1班
[初三1班 成绩] 小红: 98
[初三1班 成绩] 小李: 89
[初三1班 成绩] 小王: 100$  python .\fire-sample.py --小红 98 --小李 89 --小王 100 --cls 初三1班
[初三1班 成绩] 小红: 98


[初三1班 成绩] 小李: 89
[初三1班 成绩] 小王: 100

cls参数可以不指定名称,也可以放在任意位置上。

**students参数则必须指定参数名称,但参数名称不固定,参数的个数也不固定。

3. 总结

*args型和**kwargs型参数可以有效的缓解命令行工具灵活性不足的问题。

开发命令行工具时,根据自己的场景,使用这两种类型的参数可让命令行工具的接口更加简洁灵活。

到此这篇关于Python Fire中两种命令行参数灵活设置方式详解的文章就介绍到这了,更多相关Python Fire内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文