Я хотел бы иметь интерактивное приглашение, подобное IPython в рамках программы.Пользовательский интерактивный терминал (CLI) с автозаполнением по классам и объектам
Особенности Я хотел бы иметь являются:
- Пользовательские подсказки
- Авто-завершение по методам объекта и атрибуты
- Выполнение методов чтения/записи атрибутов
- Показать строку документации об ошибке
До сих пор я играл с readline
с автозавершением callba ck и магические методы, такие как __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
Некоторые смежные вопросы являются:
- Custom interactive shell with python
- Custom Interactive shell with AutoComplete
- Simulating cli shell with python
- Creating a CLI (Shell?) in Python
К сожалению, ответы советуют использовать модуль cmd, который не очень то, что мне нужно.
[Вставить IPython] (HTTP: // IPython. орг/IPython-DOC/2/интерактивный/reference.html # вложение). Лучше сделать что-то _like_ IPython, потому что это _is_ IPython. :-) – theB
Сделал это реальным ответом – theB