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

相关文章

来自专栏飞扬的花生

jsencrypt参数前端加密c#解密

      写程序时一般是通过form表单或者ajax方式将参数提交到服务器进行验证,如何防止提交的请求不被抓包后串改,虽然无法说绝对安全却给非法提交提高了难度...

3869
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3185
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2587
来自专栏hbbliyong

WPF Trigger for IsSelected in a DataTemplate for ListBox items

<DataTemplate DataType="{x:Type vm:HeaderSlugViewModel}"> <vw:HeaderSlug...

4064
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

31810
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2576
来自专栏魂祭心

原 canvas绘制clock

4164
来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

5556
来自专栏落花落雨不落叶

canvas画简单电路图

63111
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2665

扫码关注云+社区