我正在研究一个带有shell提示符的python CLI应用程序。为了澄清,我正在寻找支持2个功能的东西。
1)在命令上提供shell提示和自动完成,比如“cmd”模块如何支持。例如:“do_u”前缀命令。(do_xyz:do_abc.)
2)支持多个子命令和选项。例如:
$ python my_prog_prompt.py
(my_prog_prompt)> cmd1 subcmd1 subsubcmd1
(my_prog_prompt)> cmd1 subcmd1 subsubcmd2
(my_prog_prompt)> cmd1 subcmd2 subsubcmd1 -x -y
(my_prog_prompt)> cmd2 subcmd1
(my_prog_prompt)> cmd2 subcmd1
(my_prog_prompt)> exit
$
我发现上面的“cmd”模块过于简单。因为它不支持多个子命令。使用Cement CLI,我可以看到它很好地支持多个命令/子命令和选项,但没有shell/提示界面。“命令”模块是否可以扩展以支持上述功能?或者还有其他可用的框架或模块我可以使用,这将给我以上的支持。
非常感谢。
最佳答案
可能迟了一个答案,但我正在寻找一个类似的选择,这就是我最终实现的:
创建此包装
def parseargs( f ):
def wrapper(s, arg ):
args={ 0: f.__name__ }
i=0
for a in arg.split():
i+=1
if i>0 and '=' in a:
args[i] = a.split('=', 1)
else:
args[i] = a
return f(s, args)
wrapper.__doc__ = f.__doc__
return wrapper
在课堂上这样使用:
@parseargs
def do_setvar_for_group(self, args):
'setvar_for_group <group> <var1=value1> : Sets a variable for a group'
command = args[0] # command = 'setvar_for_group'
group = args[1] # group = 'example_group'
var_key = arg[2][0] # var_key = 'myvar'
var_value = arg[2][1] # var_value = 'example'
#
# You would get this values by executing:
# prompt> setvar_for_group example_group myvar=example