1、argparse
argparse是python自带的模块,要经历解析器初始化、参数定义、解析一套流程,使用起来有些繁琐。
一篇argparse使用的文章:https://www.cnblogs.com/yymn/p/8056487.html
argpase的使用:
class Calculator(object): """ 计算器 """ def add(self, x, y): """ 加法运算 Args: x: 第一个操作数 y: 第二个操作数 """ return x + y def sub(self, x, y): return x - y def multiply(self, x, y): return x * y def devide(self, x, y): assert y != 0, "y参数不正确" return x / y if __name__ == "__main__": # 初始化解析器 parser = argparse.ArgumentParser() # 定义参数 parser.add_argument("action", choices=["add", "sub", "multiply", "devide"], help="操作") parser.add_argument("x", type=int, help="第一个操作数") parser.add_argument("y", type=int, help="第二个操作数") parser.add_argument("-v", "--verbose", help="显示详细信息", action="store_true") # 解析 args = parser.parse_args() calculator = Calculator() if args.verbose: print "x=", args.x print "y=", args.y print "action=", args.action print "result:", getattr(calculator, args.action)(args.x, args.y) |
2、click
Click 是flask作者用 Python 写的一个第三方模块,用于快速创建命令行。Click 相比于 Argparse,就好比 requests 相比于 urllib。
Click 则是以装饰器的形式作用在目标函数中,要侵入函数本身,本质上还是对 argparse的一种改良作品。
一篇click使用的文章:http://python.jobbole.com/87111/
click的使用:
class Calculator(object): """ 计算器 """ def add(self, x, y): """ 加法运算 Args: x: 第一个操作数 y: 第二个操作数 """ return x + y def sub(self, x, y): return x - y def multiply(self, x, y): return x * y def devide(self, x, y): assert y != 0, "y参数不正确" return x / y @click.command() # 装饰一个函数,使之成为命令行接口 @click.option("--verbose", type=click.BOOL, default=False, help="Show verbose info.") # 定义选项,help还不支持中文,报编码问题 @click.argument("action", type=click.Choice(["add", "sub", "multiply", "devide"])) # 定义固定参数 @click.argument("x", type=click.INT) @click.argument("y", type=click.INT) def calc(action, x, y, verbose): calculator = Calculator() if verbose: print "x=", x print "y=", y print "action=", action print "result:", getattr(calculator, action)(x, y) if __name__ == "__main__": calc() |
3、fire
fire 这个命令行解析工具非常牛逼,把命令行工具做到了极致,算是一种颠覆式创新,
一行代码能把函数导出到命令行窗口,该项目是 Google工程师开源的 Python 库,虽然代码放到了google官方账号下,但是项目主页申明说它不是 Google 官方项目。
fire使用文档:https://github.com/google/python-fire/blob/master/docs/guide.md
fire的使用:
# 用法1: fire.Fire() # 直接在程序中调用 fire.Fire(),不需要修改目标函数,fire 会把当前模块下的所有对象导出到命令行中 def add(x, y): return x + y def sub(x, y): return x - y hello = "hello world" if __name__ == "__main__": fire.Fire() # 用法2: fire.Fire(<fn>) # Fire 可以指定某个函数导出到命令行 def add(x, y): return x + y if __name__ == "__main__": fire.Fire(add) # 当 Fire 接收函数 add 作为参数时,只加载 add 函数到命令行中,此时,在命令行中运行时也无需再指定函数名字,只需要指定参数就好。 # 用法3:fire.Fire(<dict>) # Fire 不仅可以接收函数,还可以接收字典对象作为参数,可在字典中配置那些函数需要导出到命令行中。例如,有加减乘3个函数,我们可以选择性的选择其中2个导出到命令行。 def add(x, y): return x + y def sub(x, y): return x - y def test(): return "test" if __name__ == "__main__": fire.Fire({ "add": add, "sub": sub }) # 用法4:fire.Fire(<object>) # Fire 还可以接收类的实例对象 if __name__ == "__main__": calculator = Calculator() fire.Fire(calculator) # 用法5:fire.Fire(class) # Fire 还可以接收一个类作为参数 if __name__ == "__main__": fire.Fire(Calculator) |