【问题标题】:python command line interface with shell prompt带有shell提示符的python命令行界面
【发布时间】:2015-12-01 18:43:07
【问题描述】:

我正在研究一个带有 shell 提示符的 python CLI 应用程序。为了澄清,我正在寻找支持 2 个功能的东西。

1) 提供 shell 提示和自动完成命令,如“cmd”模块支持的方式。例如:“do_”前缀命令。 (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/提示界面。可以扩展“cmd”模块以支持上述内容吗?或者是否有其他可用的框架或模块我可以使用,这将为我提供上述支持。

非常感谢。

【问题讨论】:

  • 您看过readlinerlcompleter 模块吗?

标签: python linux bash shell command-line-interface


【解决方案1】:

可能迟到的答案,但我正在寻找一个类似的选项,这就是我最终实施的:

  1. 创建此包装器
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
  1. 在你的课堂上像这样使用它:
@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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-25
    • 2012-03-20
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    相关资源
    最近更新 更多