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

1 ответ

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

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

from IPython import embed
embed()

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

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