2015-09-08 1 views
0

Я хотел бы иметь интерактивное приглашение, подобное 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 

Некоторые смежные вопросы являются:

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

+1

[Вставить IPython] (HTTP: // IPython. орг/IPython-DOC/2/интерактивный/reference.html # вложение). Лучше сделать что-то _like_ IPython, потому что это _is_ IPython. :-) – theB

+0

Сделал это реальным ответом – theB

ответ

2

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

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

from IPython import embed 
embed() 

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

Смежные вопросы