Вкладка автозаполнения и простая реализация подкоманд в модуле 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()