Python cmd模块多级选项卡完成(来自两个或更多列表)

我的当前版本的CLI(在此示例中已清除)在两个级别的制表符完成时均能很好地工作。我没有关于如何从第二种可供选择的事物中增加竞争的想法了。

这是我当前的版本:

from cmd import Cmd

settings = ['first','second','third']
parameters = ['alpha','bravo','charlie']

class Prompt(Cmd):

    def __init__(self):
        Cmd.__init__(self)
        self.prompt = 'Command: '
        self.setting1 = ""
        self.setting2 = ""
        self.setting3 = ""

    def completenames(self,text,*ignored):
        # Modified tab complete to add extra space after command
        dotext = 'do_'+text
        return [a[3:]+' ' for a in self.get_names() if a.startswith(dotext)]

    def do_set(self,args):
        params = args.split()
        if len(params) == 0:
            print('Setting 1 = ' + self.setting1)
            print('Setting 2 = ' + self.setting2)
            print('Setting 3 = ' + self.setting3)
        else:
            if params[0] in settings and len(params) > 1:
                if params[0] == settings[0]:
                    self.setting1 = params[1]
                    print('Setting 1 = ' + self.setting1)
                elif params[0] == settings[1]:
                    self.setting2 = params[1]
                    print('Setting 2 = ' + self.setting2)
                elif params[0] == settings[2]:
                    self.setting3 = params[1]
                    print('Setting 3 = ' + self.setting3)
            else:
                print('Usage:')
                print('set <setting> <value>')
                print('type "set" for possible settings and their current value')

    def complete_set(self,line,start_index,end_index):
        if text:
            return [
                command + ' ' for command in settings
                if command.startswith(text)
            ]
        else:
            return settings

    def do_EOF(self,inp):
        print('\n')
        return True

Prompt().cmdloop()

使用两个级别,就可以了:

Command: <tab>s<tab> fi<tab>

结果是:set first

我要从此参数列表中完成第三个选项卡的制表符。所以看起来像这样:

Command: <tab>s<tab> fi<tab> br<tab>

结果自然是:set first bravo

jinwenyu2002 回答:Python cmd模块多级选项卡完成(来自两个或更多列表)

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3153248.html

大家都在问