Пользовательский интерактивный терминал (CLI) с автозаполнением по классам и объектам
Я хотел бы, чтобы в программе была интерактивная подсказка, похожая на IPython.
Особенности, которые я хотел бы иметь:
- Пользовательская подсказка
- Автозаполнение методов и атрибутов объекта
- Выполнение методов, чтение / запись атрибутов
- Показать строку документа при ошибке
До сих пор я играл с readline
с функцией обратного вызова автозавершения и магическими методами, такими как __dir__
, __doc__
или же __dict__
,
Я уверен, что смогу реализовать такое решение, но я ищу существующий модуль, который может выполнить эту работу за меня.
В моей идее я хотел бы использовать это так:
class Foo:
def Say(self):
return "The answer is 42"
foo = Foo()
cli = Cli() # The terminal interface I want to have
cli.RegisterObject(foo, showAttributes = True, showProtected = True)
cli.AddCommand('exit', exit)
cli.Start(defaultPrompt = ">")
Друг посоветовал мне использовать IPython вместо нестандартного решения. К сожалению, IPython слишком открыт для моего приложения, где новички наверняка запутаются. Я не хочу, чтобы конечный пользователь имел доступ ко всему.
В конце у нас будет что-то вроде этого:
$ ./cli.py
>foo.<tab>
Say
>foo.Say()
The answer is 42
>bar.AreYouHere()
Unknown command!
>exit
Некоторые связанные вопросы:
- Пользовательская интерактивная оболочка с питоном
- Пользовательская интерактивная оболочка с автозаполнением
- Имитация Cli Shell с Python
- Создание CLI (Shell?) В Python
К сожалению, ответы рекомендуют использовать модуль cmd, который не очень то, что мне нужно.
1 ответ
Вставить IPython. Лучше, чем сделать что-то вроде IPython, потому что это IPython.
Как минимум, запуск сессии IPython включает в себя:
from IPython import embed
embed()
В справочнике по IPython есть много дополнительных опций конфигурации (включая примеры)