Пользовательский интерактивный терминал (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

Некоторые связанные вопросы:

К сожалению, ответы советуют использовать модуль cmd, который мне не очень нужен.


person nowox    schedule 08.09.2015    source источник
comment
Встроить IPython. Лучше, чем делать что-то похожее на IPython, потому что это есть IPython. :-)   -  person theB    schedule 08.09.2015
comment
Сделал это фактическим ответом   -  person theB    schedule 08.09.2015


Ответы (1)


Встроить IPython. Лучше, чем делать что-то вроде IPython, потому что это IPython.

Как минимум запуск сеанса IPython включает в себя:

from IPython import embed
embed()

Доступно множество дополнительных параметров конфигурации (включая примеры) в Справочнике по IPython

person theB    schedule 08.09.2015