在 类 和对象上自动完成的自定义交互式终端 (CLI)
Custom interactive terminal (CLI) with autocompletion on classes and objects
我想在程序中有一个类似于 IPython 的交互式提示。
我想要的功能是:
- 自定义提示
- 自动完成对象的方法和属性
- 方法的执行,read/write 属性
- 出错时显示文档字符串
到目前为止,我一直在使用 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
一些相关问题是:
- Custom interactive shell with python
- Custom Interactive shell with AutoComplete
- Simulating cli shell with python
- Creating a CLI (Shell?) in Python
不幸的是,答案建议使用 cmd 模块,这不是我所需要的。
Embed IPython。比制作 IPython 这样的东西更好,因为它是 IPython.
至少,启动一个 IPython 会话涉及:
from IPython import embed
embed()
中有很多额外的配置选项(包括示例)
我想在程序中有一个类似于 IPython 的交互式提示。
我想要的功能是:
- 自定义提示
- 自动完成对象的方法和属性
- 方法的执行,read/write 属性
- 出错时显示文档字符串
到目前为止,我一直在使用 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
一些相关问题是:
- Custom interactive shell with python
- Custom Interactive shell with AutoComplete
- Simulating cli shell with python
- Creating a CLI (Shell?) in Python
不幸的是,答案建议使用 cmd 模块,这不是我所需要的。
Embed IPython。比制作 IPython 这样的东西更好,因为它是 IPython.
至少,启动一个 IPython 会话涉及:
from IPython import embed
embed()
中有很多额外的配置选项(包括示例)