之前介绍过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 小华

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

  1. 可以不输入参数名称(比如第一个例子),按照顺序第一参数赋值给school,其余的赋值给*names
  2. *names参数支持不定长度的值
  3. school参数指定参数名的话,可以放在任意的位置(比如上面第四个例子)。

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:更加灵活的命令行参数的更多相关文章

  1. 【Python】 配置解析ConfigParser & 命令行参数解析optparser

    ConfigParser ConfigParser包装了配置文件的读取和写入,使得python程序可以更加轻松操作配置文件了.这里的配置文件是指.ini的那种文件,基本格式如下 [section_a] ...

  2. python+pytest,通过自定义命令行参数,实现浏览器兼容性跑用例

    场景拓展: UI自动化可能需要指定浏览器进行测试,为了做成自定义配置浏览器,可以通过动态添加pytest的命令行参数,在执行的时候,获取命令行传入的参数,在对应的浏览器执行用例. 1.自动化用例需要支 ...

  3. Python 的命令行参数处理 optparse->argparse

    optaprse自2.7版开始弃用:弃用optparse模块,不会进一步开发,将继续开发argparse模块作为替代. 但是用习惯了optparse,还是很好用的撒. optparse使用起来,相比旧 ...

  4. python命令行参数解析模块argparse和docopt

    http://blog.csdn.net/pipisorry/article/details/53046471 还有其他两个模块实现这一功能,getopt(等同于C语言中的getopt())和弃用的o ...

  5. python解析命令行参数

    常常需要解析命令行参数,经常忘记,好烦,总结下来吧. 1.Python 中也可以所用 sys 的 sys.argv 来获取命令行参数: sys.argv 是命令行参数列表 参数个数:len(sys.a ...

  6. python处理命令行参数

    直接从命令行执行py文件的时候如果带有参数,如何获取这些参数,如何解析? http://blog.chinaunix.net/uid-20786165-id-3182268.html sys.argv ...

  7. [转]Python 命令行参数和getopt模块详解

    FROM : http://www.tuicool.com/articles/jaqQvq 有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Pyt ...

  8. python命令行参数

    〇.python中对应的argc, argv需要模块:sys参数个数:len(sys.argv)脚本名:    sys.argv[0]参数1:     sys.argv[1]参数2:     sys. ...

  9. awk,perl,python的命令行参数处理

    Python,Perl,Bash命令行参数 Part I 日常经常性的和Perl,Python,Bash打交道,但是又经常性的搞混他们之间,在命令行上的特殊性和index的区别,Python真的是人性 ...

  10. Python 命令行参数和getopt模块详解

    有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Python里,命令行的参数和C语言很类似(因为标准Python是用C语言实现的).在C语言里,m ...

随机推荐

  1. Vue项目实现导入导出Excel表格功能

    前提:在我的项目中我使用的是ElementUi前端UI框架,用到的是里面的Upload上传组件. 第一步:需要安装三个依赖 npm install -S file-saver xlsx  (这里其实安 ...

  2. cs 保研经验贴 | 数学试题 · 自动化所特供版

    据(2022 年我所看的)往年经验,自动化所比较重视数学. 感觉,按照自动化所的数学题库复习,就足以应付大多数夏令营的笔试面试了. 目录 高等数学 线性代数 概率论 机器学习 复变函数 其他 同站相关 ...

  3. B2033 A*B 问题

    A*B 问题 题目描述 输入两个正整数 \(A\) 和 \(B\),求 \(A \times B\) 的值.注意乘积的范围和数据类型的选择. 输入格式 一行,包含两个正整数 \(A\) 和 \(B\) ...

  4. [转帖]Linux 性能监控 Sar (Sysstat) 示例

    https://bbs.huaweicloud.com/blogs/345343#   [摘要] 使用 sar,您可以实时监控各种 Linux 子系统(CPU.内存.I/O..)的性能,还可以持续收集 ...

  5. [转帖]谈谈ClickHouse性能情况以及相关优化

    https://zhuanlan.zhihu.com/p/349105024 ClickHouse性能情况 主要分为4个方面 1.单个查询吞吐量 场景一: 如果数据被放置在page cache中,则一 ...

  6. [转帖]三篇文章了解 TiDB 技术内幕 - 谈调度

    返回全部 申砾产品技术解读2017-06-06 为什么要进行调度 先回忆一下 三篇文章了解 TiDB 技术内幕 - 说存储提到的一些信息,TiKV 集群是 TiDB 数据库的分布式 KV 存储引擎,数 ...

  7. RPM安装的Oracle19c 修改init.ora进行修复以及最简单开机启动Oracle的方法

    RPM安装的Oracle19c 修改init.ora进行修复以及最简单开机启动Oracle的方法 背景 今天开始使用自己心的ThinkBook14 的笔记本 因为已经没有了 Linux测试环境供我使用 ...

  8. [转帖]信创从芯开始,CPU实现国产有多难?

    https://www.eet-china.com/mp/a213516.html 数字底座的"底座"--CPU,决定信创底层逻辑的关键.CPU 是信息产业中最基础的核心部件,指令 ...

  9. [转帖]一本正经的八卦一下CPU的自主可控

    https://zhuanlan.zhihu.com/p/36391482 (2018年的4月16日,美国商务部发布对中兴通讯出口权限禁令,禁止美国企业向其出售零部件,史称"中兴禁运事件&q ...

  10. 【构造,树】【Loj】Loj6669 Nauuo and Binary Tree

    2023.7.3 Problem Link 交互库有一棵 \(n\) 个点的二叉树,你每次可以询问两个点之间的距离,猜出这棵二叉树.\(n\le 3000\),询问次数上限 \(30000\). 首先 ...