我正在研究一个带有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

09-20 22:37