Google 开源的 Python 命令行库:深入 fire(二) (2)

在 fire 中,参数的类型由其值决定,通过下面的简单代码,我们可以看到给不同的值时,fire会解析为什么类型:

import fire fire.Fire(lambda obj: type(obj).__name__) $ python example.py 10 int $ python example.py 10.0 float $ python example.py hello str $ python example.py '(1,2)' tuple $ python example.py [1,2] list $ python example.py True bool $ python example.py {name: David} dict

如果想传递字符串形式的数字,那就需要小心引号了,要么把引号引起来,要么转义引号:

# 数字 10 $ python example.py 10 int # 没有对引号处理,仍然是数字10 $ python example.py "10" int # 把引号引起来,所以是字符串“10” $ python example.py '"10"' str # 另一种把引号引起来的形式 $ python example.py "'10'" str # 转义引号 $ python example.py \"10\" str

考虑下更复杂的场景,如果传递的是字典,在字典中有字符串,那么也是要小心引号的:

# 推荐做法 $ python example.py '{"name": "David Bieber"}' dict # 也是可以的 $ python example.py {"name":'"David Bieber"'} dict # 错误,会被解析为字符串 $ python example.py {"name":"David Bieber"} str # 错误,不会作为单个参数(因为中间有空格),报错 $ python example.py {"name": "David Bieber"} <error>

如果值为 True 或 False 将为视为布尔值,fire 还支持通过 --name 将 name 设为 True,或通过 --noname 将 name 设为 False:

$ python example.py --obj=True bool $ python example.py --obj=False bool $ python example.py --obj bool $ python example.py --noobj bool 2.5 Fire 内置选项参数

Fire 内置了一些选项参数,以帮助我们更容易地使用命令行程序。若想使用内置的选项功能,需要将选项参数跟在 -- 后,在上文中,我们介绍了 --separator 参数,除了它,fire 还支持以下选项参数:

command -- --help 列出详细的帮助信息

command -- --interactive 进入交互式模式

command -- --completion [shell] 生成 CLI 程序的自动补全脚本,以支持自动补全

command -- --trace 获取命令的 Fire 追踪以了解调用 Fire 后究竟发生了什么

command -- --verbose 获取包含私有成员在内的详情

三、小结

fire 让命令行程序的实现变得特别简单,本文着重介绍了它的链式调用、选项参数、位置参数、参数类型以及内置选项参数。fire 的概念并不多,真正践行了“把简单留给他人,把复杂留给自己”的理念。

fire 的介绍就告一段落,它绝对会是你编写命令行程序的一大利器。在下一篇文章中,我们依然会通过实现一个简单的 git 程序来进行 fire 的实战。

『讲解开源项目系列』——让对开源项目感兴趣的人不再畏惧、让开源项目的发起者不再孤单。跟着我们的文章,你会发现编程的乐趣、使用和发现参与开源项目如此简单。欢迎留言联系我们、加入我们,让更多人爱上开源、贡献开源~

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwwzpg.html