Tab python cmd模块中子命令的自动完成和简单实现?

Tab python cmd模块中子命令的自动完成和简单实现?,python,command,subcommand,Python,Command,Subcommand,是否可以在Cmd模块的python Cmd类的子命令中添加tab autocomplete?假设我正在运行我的命令循环,我想要一个名为add的命令,在那里我可以选择一些动物的名字,比如addhorse,或者addelephant。如果可能的话,如何为任何子命令创建选项卡自动完成 我为实际项目所做的一件事是为不同的模式使用不同的类。如果键入白名单,它将在该类中运行另一个命令循环,并且现在处于“白名单”模式。然后可以键入exit返回主命令循环。这对于更重的模式来说似乎很好,但是创建一个全新的类inh

是否可以在Cmd模块的python Cmd类的子命令中添加tab autocomplete?假设我正在运行我的命令循环,我想要一个名为
add
的命令,在那里我可以选择一些动物的名字,比如
addhorse
,或者
addelephant
。如果可能的话,如何为任何子命令创建选项卡自动完成

我为实际项目所做的一件事是为不同的模式使用不同的类。如果键入
白名单
,它将在该类中运行另一个命令循环,并且现在处于“白名单”模式。然后可以键入exit返回主命令循环。这对于更重的模式来说似乎很好,但是创建一个全新的类inherits
Cmd
对于添加不同类型的东西(如上面的示例)来说似乎有点简单。那么,为
Cmd
类添加简单(就代码而言)子命令的最佳方法是什么?谢谢。

以下工作:

#!/usr/bin/env python


from __future__ import print_function


from cmd import Cmd
import readline  # noqa


class Zoo(Cmd):

    def __init__(self, animals):
        Cmd.__init__(self)

        self.animals = animals

    def do_add(self, animal):
        print("Animal {0:s} added".format(animal))

    def completedefault(self, text, line, begidx, endidx):
        tokens = line.split()
        if tokens[0].strip() == "add":
            return self.animal_matches(text)
        return []

    def animal_matches(self, text):
        matches = []
        n = len(text)
        for word in self.animals:
            if word[:n] == text:
                matches.append(word)
        return matches


animals = ["Bear", "Cat", "Cheetah", "Lion", "Zebra"]
zoo = Zoo(animals)
zoo.cmdloop()