fire让命令行接口更简单

Python中用于生成命令行接口CLIs(Command Line Interfaces)的库已经有一些了,例如标准库argparse和第三方的click,但是这些库为Python程序生成CLIs的时候稍显麻烦,需要增加的地方比较多,过程稍显繁琐. 这里介绍的这个利器,几乎可以不改变原始代码就能够生成CLIs,它就是fire


fire让命令行如此简单

下面通过一个简单的计算器来展示下fire的魔力

原始计算器

 1def add(x, y):
 2    """
 3    加法运算
 4    :param x:
 5    :param y:
 6    :return:
 7    """
 8    return x + y


 9def subtract(x, y):
10    """
11    减法运算
12    :param x:
13    :param y:
14    :return:
15    """
16    return x - y


17def multiply(x, y):
18    """
19    乘法运算
20    :param x:
21    :param y:
22    :return:
23    """
24    return x * y


25def divide(x, y):
26    """
27    除法运算
28    :param x:
29    :param y:
30    :return:
31    """
32    return x / y

click改造版

 1import click


 2@click.group()
 3def cli():
 4    pass


 5@cli.command()
 6@click.option('--x', default=1, help=u'被加数')
 7@click.option('--y', default=1, help=u'加数')
 8def add(x, y):
 9    """
10    加法运算
11    :param x: 
12    :param y: 
13    :return: 
14    """
15    print x + y


16@cli.command()
17@click.option('--x', default=1, help=u'被减数')
18@click.option('--y', default=1, help=u'减数')
19def subtract(x, y):
20    """
21    减法运算
22    :param x: 
23    :param y: 
24    :return: 
25    """
26    print x + y


27@cli.command()
28@click.option('--x', default=1, help=u'乘数')
29@click.option('--y', default=1, help=u'乘数')
30def multiply(x, y):
31    """
32    乘法运算
33    :param x: 
34    :param y: 
35    :return: 
36    """
37    print x * y


38@cli.command()
39@click.option('--x', default=1, help=u'被除数')
40@click.option('--y', default=1, help=u'除数')
41def divide(x, y):
42    """
43    除法运算
44    :param x: 
45    :param y: 
46    :return: 
47    """
48    print x / y


49if __name__ == '__main__':
50    cli()

fire改造版

 1import fire


 2def add(x, y):
 3    """
 4    加法运算
 5    :param x:
 6    :param y:
 7    :return:
 8    """
 9    return x + y


10def subtract(x, y):
11    """
12    减法运算
13    :param x:
14    :param y:
15    :return:
16    """
17    return x - y


18def multiply(x, y):
19    """
20    乘法运算
21    :param x:
22    :param y:
23    :return:
24    """
25    return x * y


26def divide(x, y):
27    """
28    除法运算
29    :param x:
30    :param y:
31    :return:
32    """
33    return x / y


34if __name__ == '__main__':
35    fire.Fire()

fire 的改动 就两行

click 是以装饰器的形式作用在目标函数中,要侵入函数本身 argparse 使用起来更麻烦些,要经历解析器初始化,参数定义,解析一套流程(这里就不代码展示了)


fire命令行使用实战

1. 列出所有方法

2. 具体方法帮助

3. 执行命令


更多魔法具体参见官方文档

https://github.com/google/python-fire

原文发布于微信公众号 - chafezhou(gh_5b8f0c59b682)

原文发表时间:2018-02-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xingoo, 一个梦想做发明家的程序员

MFC中注释含义

下面是 CStdioFile 类的部分列表,其中使用了 MFC 在其类中按类成员的用法划分它们时所采用的大多数标准注释: class CStdioFile :...

1767
来自专栏逆向与安全

菜鸟 学注册机编写之 “序列号组合”

1.OD载入程序, F9运行, 点击”Register”随便输入用户名与注册码,如下图:

730
来自专栏数据结构与算法

P1801 黑匣子_NOI导刊2010提高(06)

题目描述 Black Box是一种原始的数据库。它可以储存一个整数数组,还有一个特别的变量i。最开始的时候Black Box是空的.而i等于0。这个Black ...

3176
来自专栏坚毅的PHP

node.js学习与应用

学习资料 入门: 小白篇 http://samsungapps.csdn.net/text.html?arcid=311044 了解了 npm,类似于pytho...

3266
来自专栏木可大大

初始Java

为了让Java能够实现跨平台,Java的发明者们增加了一个抽象层,即JVM(Java Virtual Machine,Java虚拟机),自定义一套指令并且和硬件...

592
来自专栏青玉伏案

窥探Swift之类的继承与类的访问权限

  上一篇博客《窥探Swift之别具一格的Struct和Class》的博客可谓是给Swift中的类开了个头。关于类的内容还有很多,今天就来搞一下类中的继承以及类...

1625
来自专栏walterlv - 吕毅的博客

XML 的 XPath 语法

2018-06-24 11:43

492
来自专栏逸鹏说道

Python3 与 C# 基础语法对比(String专栏-新排版)

在线编程:https://mybinder.org/v2/gh/lotapp/BaseCode/master

802
来自专栏前端知识分享

第11天:JS中变量、字符串基础知识

js页面效果:轮播图、选项卡、地图、表单验证javascript是弱变量类型的语言,变量只需要用var来声明。而java要根据变 量类型来声明,

1053
来自专栏QQ音乐技术团队的专栏

​关于M4A文件的随机访问

文章介绍了M4A文件的大概结构,详细解读了其中的Sample Table Box,并结合图例,详细讲解了如何使用它来完成M4A文件的随机访问。 本文属原创作品,...

2548

扫码关注云+社区