命令行对象调度器
tambo的Python项目详细描述
tambo
==
为*每个*子命令使用*任意*参数解析器。轻松地将每个
命令作为一个独立的应用程序进行管理。
r/>
当程序的命令行界面超出几个标志和选项时,管理所有不同的选项和在一个地方发生的调用就变得很痛苦了。
`tambo`'s approach
----
如果我们能够**将命令行选项映射到对象并处理
一次*?处理子命令不取决于
构造的单个对象,而是从映射了第一级选项的对象的根开始的事件链。
代码块::python
parser=tambo.transport(args)
parser.mapper={'子命令':mysubcommandClass}
parser.dispatch()
n使用传入的参数和选项处理
的操作逻辑。
是否需要添加更多命令?只要将它们添加到这个根映射器中,它们就会保持独立。不需要在一个地方为所有
命令声明*every*single选项。这就是它寻找更多命令的方式:
…代码块::python
parser=tambo.transport(args)
parser.mapper={'subcommand':mysubcommandclass,
'bar':barclass,
'foo':fooclass}
parser.dispatch()
j
l当分派时未匹配任何内容时),则可以传递一个"with_exit"标志来获取一个名为"systemexit(0)"的"system exit":
parser.dispatch(with_exit=true)
您想要的解析器。*
让我们非常清楚地说明这一点:
=--
**python中的mand line option解析器都会遇到这种情况:``argparse``和``optparser``在调用接口时都需要一个显式地用参数构造对象。
例如,如果有
a`--verbose``标志,则首先需要将其添加到解析对象中,
大致如下:
……代码块::python
parser=parserrobject()
options,arguments=parser.parse戥args(args)
parser.add戥option('--verbose',action=-store戥true',help=-increase
,然后要对parser对象执行任何操作,都需要执行如下操作:
。代码块::python
if parser.verbose:
是试图处理对象构造的高需求。
当请求进入时,是否始终执行所有代码?
命令行类
----
命令行类是"tambo"在分派到
子命令时所期望的。它们需要遵循两个约束,但仍然允许
以任何方式处理命令行参数,使用所需的
库。
上面的erbose标志:
…代码块::python
class mysubcommand(object):
self.argv=argv
if'--verbose'in self.argv:
my\u program.verbose()
当类与根字典中定义的
映射匹配时,它将被调用,并将接收参数列表中的参数
(与在命令行上接收到的参数列表中的参数相同)。从上面可以看出,在cli上的调用应该是这样的:
my_cli子命令——verbose
>使用"tambo"解析的参数
-
尽管您可以使用任何所需的参数解析器,"`tambo"也带有自己的映射argum的小引擎
命令行中的ents to values,
表示期望的标志和参数:
。代码块::python
from tambo import transport
class mysubcommand(object):
self.argv=argv
self.parser=transport(self.argv)
def main(self):
if self.parser.has(''--verbose'):
my_program.verbose()
元组或列表,以便在映射
值时考虑它们。如果要定义别名,可以通过在传递给"transport"的主列表中的列表中对别名进行分组来完成此操作:
>;
>; >;>options=[[['-i','--import'],'--verbose']
>;>;>;parse=transport(sys_argv,options=options)
>;>;parse.parse_args()
>;>;parse.get('-i')
'somevalue'
>;>;parse.get('-import')
'somevalue'
因此别名通过将它们组合在一个列表中工作,但是
布尔标志会发生什么?您可以通过调用"has"方法来检查它们:
>;>;from tambo import transport
>;>;options=[['-i','--import'],'--verbose']
>;>;sys-argv=['/bin/myapp','--verbose']
>;>;parse=transport(sys-argv,options=options)
>;>;parse.parse_args()
>;>;parse.has('-i')
false
>;>;parse.has('--verbose')
true
>;>options=[['-i','--import'],'--verbose']
>;>sys_argv=['/bin/myapp','--verbose']
>;>parse=transport(sys_argv,options=options)
>;>parse.parse_args()
>;>parse.has('-i')
false
>;>;parse.has(['-v','--verbose'])
true
help generation
----
对于具有这些功能的子命令和命令行工具,一个常见的问题是以半自动方式生成帮助。`` tambo``有一种方法可以为
子命令执行此操作,如果有子命令,则通过调用help属性映射这些子命令,然后
在调用时将输出该信息:
。代码块::python
class mysubcommandclass(object):
,然后在参数处理程序中,它将自动调用检查是否存在帮助属性,以便在需要时显示它:
。代码块::python
parser是来自``tambo`
parser.parse_args()
ommands:
子命令执行某些操作的子命令
这是完全可选的,因为您可以通过告诉"transport"类避免检查它来避免调用捕捉帮助:
。代码块::python
parser=transport(sys.argv,check_help=false)
代码块::python
parser=transport(sys.argv,check_help=false)
if parser.has('--mandatory option'):
my_program.mandatory_thing()
else:
parser.print_help()
==
为*每个*子命令使用*任意*参数解析器。轻松地将每个
命令作为一个独立的应用程序进行管理。
r/>
当程序的命令行界面超出几个标志和选项时,管理所有不同的选项和在一个地方发生的调用就变得很痛苦了。
`tambo`'s approach
----
如果我们能够**将命令行选项映射到对象并处理
一次*?处理子命令不取决于
构造的单个对象,而是从映射了第一级选项的对象的根开始的事件链。
代码块::python
parser=tambo.transport(args)
parser.mapper={'子命令':mysubcommandClass}
parser.dispatch()
n使用传入的参数和选项处理
的操作逻辑。
是否需要添加更多命令?只要将它们添加到这个根映射器中,它们就会保持独立。不需要在一个地方为所有
命令声明*every*single选项。这就是它寻找更多命令的方式:
…代码块::python
parser=tambo.transport(args)
parser.mapper={'subcommand':mysubcommandclass,
'bar':barclass,
'foo':fooclass}
parser.dispatch()
j
l当分派时未匹配任何内容时),则可以传递一个"with_exit"标志来获取一个名为"systemexit(0)"的"system exit":
parser.dispatch(with_exit=true)
您想要的解析器。*
让我们非常清楚地说明这一点:
=--
**python中的mand line option解析器都会遇到这种情况:``argparse``和``optparser``在调用接口时都需要一个显式地用参数构造对象。
例如,如果有
a`--verbose``标志,则首先需要将其添加到解析对象中,
大致如下:
……代码块::python
parser=parserrobject()
options,arguments=parser.parse戥args(args)
parser.add戥option('--verbose',action=-store戥true',help=-increase
,然后要对parser对象执行任何操作,都需要执行如下操作:
。代码块::python
if parser.verbose:
是试图处理对象构造的高需求。
当请求进入时,是否始终执行所有代码?
命令行类
----
命令行类是"tambo"在分派到
子命令时所期望的。它们需要遵循两个约束,但仍然允许
以任何方式处理命令行参数,使用所需的
库。
上面的erbose标志:
…代码块::python
class mysubcommand(object):
my\u program.verbose()
当类与根字典中定义的
映射匹配时,它将被调用,并将接收参数列表中的参数
(与在命令行上接收到的参数列表中的参数相同)。从上面可以看出,在cli上的调用应该是这样的:
my_cli子命令——verbose
>使用"tambo"解析的参数
-
尽管您可以使用任何所需的参数解析器,"`tambo"也带有自己的映射argum的小引擎
命令行中的ents to values,
表示期望的标志和参数:
。代码块::python
from tambo import transport
class mysubcommand(object):
self.parser=transport(self.argv)
def main(self):
if self.parser.has(''--verbose'):
my_program.verbose()
元组或列表,以便在映射
值时考虑它们。如果要定义别名,可以通过在传递给"transport"的主列表中的列表中对别名进行分组来完成此操作:
>;
>;
>;
>;>;parse.parse_args()
>;>;parse.get('-i')
'somevalue'
>;>;parse.get('-import')
'somevalue'
因此别名通过将它们组合在一个列表中工作,但是
布尔标志会发生什么?您可以通过调用"has"方法来检查它们:
>;>;from tambo import transport
>;>;options=[['-i','--import'],'--verbose']
>;>;sys-argv=['/bin/myapp','--verbose']
>;>;parse=transport(sys-argv,options=options)
>;>;parse.parse_args()
>;>;parse.has('-i')
false
>;>;parse.has('--verbose')
true
>;>options=[['-i','--import'],'--verbose']
>;>sys_argv=['/bin/myapp','--verbose']
>;>parse=transport(sys_argv,options=options)
>;>parse.parse_args()
>;>parse.has('-i')
false
>;>;parse.has(['-v','--verbose'])
true
help generation
----
对于具有这些功能的子命令和命令行工具,一个常见的问题是以半自动方式生成帮助。`` tambo``有一种方法可以为
子命令执行此操作,如果有子命令,则通过调用help属性映射这些子命令,然后
在调用时将输出该信息:
。代码块::python
class mysubcommandclass(object):
,然后在参数处理程序中,它将自动调用检查是否存在帮助属性,以便在需要时显示它:
。代码块::python
parser是来自``tambo`
parser.parse_args()
ommands:
子命令执行某些操作的子命令
这是完全可选的,因为您可以通过告诉"transport"类避免检查它来避免调用捕捉帮助:
。代码块::python
parser=transport(sys.argv,check_help=false)
代码块::python
parser=transport(sys.argv,check_help=false)
if parser.has('--mandatory option'):
my_program.mandatory_thing()
else:
parser.print_help()