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 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

P2776 [SDOI2007]小组队列

题目背景 嘛,这道非常简单的给大家提供信心的省选题洛谷居然没有! 这么简单的题怎么可以没有! 给大家提升士气是义不容辞的责任! 所以我就来补一下啦.. 值得一提...

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

MFC中注释含义

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

20570
来自专栏java学习

Java每日一练(2017/6/4)

题目要求 删除目录功能: 客户任意输入一个路径,若路径格式正确则输出该路径下的所有文件夹名称 并提示“是否要删除以下的文件夹(注意:文件夹下面的所有内容...

31550
来自专栏chenjx85的技术专栏

leetcode-349-Intersection of Two Arrays

24980
来自专栏学习力

《Java从入门到放弃》框架入门篇:Struts2的基本数据传递方式 推荐

17840
来自专栏黑泽君的专栏

java基础学习_IO流03_字符流、IO流小结、案例_day21总结

10220
来自专栏恰童鞋骚年

数据结构基础温故-6.查找(下):哈希表

哈希(散列)技术既是一种存储方法,也是一种查找方法。然而它与线性表、树、图等结构不同的是,前面几种结构,数据元素之间都存在某种逻辑关系,可以用连线图示表示出来,...

16310
来自专栏liulun

Nim教程【二】

第一篇教程1秒内就被管理员从首页踢掉了 管理员嫌内容太少,没有含金量,这次多写一些。 这应该是国内第一个关于Nim入门的系列教程 好,闲话休提,言归...

268100
来自专栏菩提树下的杨过

.NET3.5新特性,Lambda表达式

【原文地址】New “Orcas” Language Feature: Lambda Expressions 【原文发表日期】 Sunday, April 0...

21080
来自专栏腾讯移动品质中心TMQ的专栏

Python2中的中文字符编解码浅析

自动化测试过程中,输入文本、读取文件、解析网络请求、字符串断言、正则匹配这些步骤都是必不可少的。而Python是测试过程中最为常用的语言之一,很多测试团队的自动...

32060

扫码关注云+社区

领取腾讯云代金券