2

是否可以在 cmd 模块的 python Cmd 类中的子命令中添加选项卡自动完成功能?假设我正在运行我的命令循环,并且我想要一个名为 的命令add,然后我可以在其中选择动物名称,例如add horseadd elephant。如果可能的话,如何为任何子命令添加自动完成选项卡?

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

4

1 回答 1

3

以下作品:

#!/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()
于 2014-06-20T23:10:17.110 回答