Python中用于生成命令行接口CLIs(Command Line Interfaces)的库已经有一些了,例如标准库argparse和第三方的click,但是这些库为Python程序生成CLIs的时候稍显麻烦,需要增加的地方比较多,过程稍显繁琐. 这里介绍的这个利器,几乎可以不改变原始代码就能够生成CLIs,它就是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
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()
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 使用起来更麻烦些,要经历解析器初始化,参数定义,解析一套流程(这里就不代码展示了)
更多魔法具体参见官方文档
https://github.com/google/python-fire