自定义交互式终端(CLI),具有类和对象的自动完成功能

时间:2015-09-08 15:39:00

标签: python python-interactive interactive-shell

我希望在程序中有类似于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 个答案:

答案 0 :(得分:2)

Embed IPython。比制作​​IPython更好,因为它是IPython。

至少,启动IPython会话涉及:

from IPython import embed
embed()

IPython Reference

中有许多其他配置选项(包括示例)