Завершение основанного на контексте модуля Python cmd

В питоне cmd модуль, когда я нажимаю кнопку TAB, я получаю список возможных команд, которые доступны и которые я определил в своем cmd.Cmd учебный класс. У меня вопрос, возможно ли показать набор команд на основе контекста, как, например, в CLI маршрутизатора Cisco?

3 ответа

У меня нет опыта работы с этой библиотекой, но док говорит

Если завершение включено, завершение команд будет выполняться автоматически, а завершение командных аргументов выполняется путем вызова complete_foo() с аргументами text, line, begidx и endidx. текст - это префикс строки, который мы пытаемся сопоставить: все возвращаемые совпадения должны начинаться с него. line - текущая строка ввода с удаленным начальным пробелом, begidx и endidx - начальный и конечный индексы текста префикса, которые можно использовать для обеспечения различного завершения в зависимости от положения аргумента.

Так что, может быть, вы можете реализовать контекстное завершение в complete_foo функция

Если вы хотите что-то вроде Cisco, посмотрите на ishell,

ishell поможет вам легко создать интерактивную оболочку для вашего приложения. Он поддерживает завершение команд, динамические аргументы, историю команд и цепочку команд.

https://github.com/italorossi/ishell

Пример для cisco можно найти по адресу https://github.com/italorossi/ishell/blob/master/examples/cisco.pyПример Cisco ishell

PS: я автор.

Я нашел ответ на свой вопрос. Можно использовать вложенные интерпретаторы, поэтому вложенный интерпретатор - это другой объект интерпретатора, который будет иметь свои собственные команды, таким образом, каждый контекст может моделироваться вложенным интерпретатором. Вот хорошее объяснение и пример:

наследование объектов и вложенный cmd

Другие вопросы по тегам