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

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

我正在为我正在处理的实际项目做的一件事是为不同的模式使用不同的类。 如果您键入whitelist ,它将在该类中运行另一个命令循环,并且现在处于“白名单”模式。 然后你可以输入exit返回到主要的命令循环。 对于更重量级的模式来说,这似乎很好,但是创建一个全新的类继承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()
链接地址: http://www.djcxy.com/p/56499.html

上一篇: Tab autocomplete and simple implementation of subcommands in python cmd module?

下一篇: How to use cmd from python