用于创建将类转换为命令行工具的装饰器集。
cltools的Python项目详细描述
要创建的装饰器集将类转换为命令行工具
想象一下,您有一个类想要从命令行使用,而没有 显式地解析命令行并生成所有路由信息。
这就是cltools通过在类和方法上证明decorators来实现 类可运行,并将方法转换为命令。
cltoolscreate命令工具,如git/hg/svn/apt get/apt cache/…,这意味着 工具将具有命令
简单示例:
想象一下,您有一个简单的类来生成任务,并且您想要生成一个命令行工具 带着这个。假设它是一个计算器模块calclib.py:
#!/usr/bin/env pythonclassCalc(object):def__init__(self):passdefadd(self,value1,value2):returnvalue1+value2defmult(self,value1,value2):returnvalue1*value2
然后,我们将编写一个简单的类并转换为一个可运行的工具:
#!/usr/bin/env pythonimportsysfromcalclibimportCalcfromcltoolsimportCLRunnerfromsupertoolsimportsuperable@CLRunner.runnable()@superableclassCalcTool(object):'''A simple command-line wrapper for calclib'''def__init__(self):self._calc=Calc()defget_two_params(self,args):iflen(args)!=2:# errorexit provided by CLRunnable parentself.errorexit("Need two values VALUE1 and VALUE2 as arguments")try:value1=int(args[0])exceptException:self.errorexit("Value [%s] should be a valid number"%(args[0],))try:value2=int(args[1])exceptException:self.errorexit("Value [%s] should be a valid number"%(args[1],))returnvalue1,value2@CLRunner.command()defadd(self,args,kwargs):'''Add two values VALUE1 and VALUE2 given as parameters'''value1,value2=self.get_two_params(args)value=self._calc.add(value1,value2)self.status("Result : [%s]"%(value,))@CLRunner.command()defmult(self,args,kwargs):'''Multiplie two values VALUE1 and VALUE2'''value1,value2=self.get_two_params(args)value=self._calc.mult(value1,value2)self.status("Result : [%s]"%(value,))@CLRunner.command()defhelp(self,args=[],kwargs={}):'''Get this help'''self.__super.help()if__name__=='__main__':calctool=CalcTool()ifnot(calctool.run(sys.argv)):sys.exit(1)
现在我们可以测试命令行工具:
$ ./calc.py Usage: calc.py COMMAND_NAME [OPTION] [VALUES] A simple command-line wrapper for calclib Commands: add Add two values VALUE1 and VALUE2 given as parameters help Get this help mult Multiplie two values VALUE1 and VALUE2 Error : Need a command name
$ ./calc.py add 4 17 Result : [21]
$ ./calc.py add 15 66 33 Error : Need two values VALUE1 and VALUE2 as arguments
注意,帮助是基于类中声明的命令自动生成的, 以及附加到类和方法的联机文档。