Вкладка автозаполнения и простая реализация подкоманд в модуле Python cmd?

Можно ли добавить автозаполнение вкладки в подкоманды в классе Python Cmd в модуле cmd? Скажем, у меня запущен командный цикл, и я хотел, чтобы команда называлась addгде я могу выбрать имена животных, например add horse, или же add elephant, Как я могу вкладку автозаполнения для любых подкоманд, если это вообще возможно?

Одна вещь, которую я делаю для реального проекта, над которым я работаю, - это использование разных классов для разных режимов. Если вы печатаете whitelist, он выполняет еще один командный цикл в этом классе и теперь находится в режиме "белого списка". Затем вы можете набрать команду exit, чтобы вернуться в главный командный цикл. Это кажется хорошим для более тяжеловесных режимов, но создание нового класса наследует Cmd кажется немного для чего-то такого простого, как добавление различных типов вещей, как в примере выше. Итак, каков наилучший способ добавить простые (с точки зрения кода) подкоманды для Cmd класс, который может быть завершен? Благодарю.

1 ответ

Решение

Следующие работы:

#!/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()
Другие вопросы по тегам