开云-Google 开源的 Python 命令行库:初探 fire

Google 开源的 Python 号令行库:初探 fire 时候:2024-12-13 21:14:56 手机看文章

扫描二维码随时随地手机看文章

1、媒介

在本系列前面所有文章中,我们别离介绍了 argparse、docopt和 click的首要功能和用法。它们各具特点,都能超卓地完成号令行使命。argparse是面向进程的,需要先设置解析器,再界说参数,再解析号令行,最后实现营业逻辑。docopt先用声明式的语法界说出参数,再进程式地解析号令行和实现营业逻辑。click则是用装潢器的体例进一步简化显式的号令挪用逻辑,但依然不敷面向对象。

而今天要介绍的 fire则是用一种面向广义对象的体例来玩转号令行,这类对象可所以类、函数、字典、列表等,它加倍矫捷,也加倍简单。

本系列文章默许利用 Python 3 作为注释器进行讲授。若你仍在利用 Python 2,请留意二者之间语法和库的利用差别哦~
2、介绍

fire 可以按照任何 Python 对象主动生成号令行接口。它有以下特征:

能以简单的体例生成 CLI 是一个开辟和调试 Python 代码的适用东西 能将现存代码或他人的代码转换为 CLI 使得在 Bash 和 Python 间的转换变得更轻易 经由过程预先为 REPL 设置所需的模块和变量,使得适用 REPL 加倍轻易

经由过程以下号令可快速安装 fire库:

pip install fire
3、快速最先

回想下利用 argparse、docopt和 click实现号令行法式的步调:

对 argparse来讲,要先设置解析器,再界说参数,再解析号令行,最后实现营业逻辑(四步) 对 docopt来讲,要先界说界说接口描写,再解析号令行,最后实现营业逻辑(三步) 对 click来讲,就是实现营业逻辑和经由过程装潢器的体例界说参数(两步)

它们的实现步调愈来愈简单,从四步简化到了两步。而今天的主角 fire只需一步,现营业逻辑就够了。

这的确简单的不成思议,为何如许做就够了?我们无妨斟酌下 Python 中的函数,函数是否是可以对应一个号令行法式,而函数的参数可以对报命令行法式的参数和选项呢?再看看 Python 中的类,一个类是否是可以对应一个号令行法式,而类中的每一个实例方式便可以对应子号令,实例方式中的参数就是对应子号令的参数和选项。

这么一想,理论上确切是可以实现的,我们无妨经由过程下面的示例来看看 fire是若何让我们经由过程简单的体例实现号令行法式。

3.1 利用函数

来看这么一个例子:

import fire def hello(name="World"): return 'Hello {name}!'.format(name=name) if __name__ == '__main__': fire.Fire(hello)

在上述例子中界说一个 hello函数,它接管 name参数,而且有默许值 "World"。利用 fire.Fire(hello)便可很是简单快速地实现号令功能,这个号令行就接管 --name选项,不供给时利用默许值 "World",供给时就按供给的值来。

可在号令行中履行以下号令:

美金 python hello.pyHello World!美金 python hello.py --name=ProdesireHello Prodesire!美金 python hello.py --help INFO: Showing help with the command 'hello.py -- --help'.NAME hello.pySYNOPSIS hello.pyFLAGS --name=NAME
3.2 利用类

利用函数是最简单的体例,假如我们想以更有组织的体例来实现,好比利用类,fire也是撑持的。

import fire class Calculator(object): """A simple calculator class.""" def double(self, number): return 2 * number def triple(self, number): return 3 * number if __name__ == '__main__': fire.Fire(Calculator)

在上述例子中界说一个 Calculator类,它有两个实例方式 double和 triple,而且都接管 number参数,没有默许值。利用 fire.Fire(Calculator)便可很是简单快速地实现号令功能,这个号令行撑持两个子号令 double和 triple,位置参数 NUMBER或选项参数 --number

可在号令行中履行以下号令:

美金 python calculator.py double 1020美金 python calculator.py triple --number=1545美金 python calculator.py double --help INFO: Showing help with the command 'calculator.py double -- --help'.NAME calculator.py doubleSYNOPSIS calculator.py double NUMBERPOSITIONAL ARGUMENTS NUMBERNOTES You can also use flags syntax for POSITIONAL ARGUMENTS
4、小结

fire的利用体例很是简单,定一个 Python 对象,剩下的就交给 fire来处置,可谓长短常的 Pythonic,这也是它会如斯受接待的缘由。

除上面展现的内容,fire还撑持更多种类的 Python 对象,也具有良多壮大的功能,我们将在接下来几节中慢慢走近它。

欲知详情,请下载word文档 下载文档

上一篇:开云-Google 开源的 Python 命令行库:fire 实现 git 命令 下一篇:开云-DSP