我在我的宠物开源项目RevitPythonShell(建筑建模软件 Autodesk Revit Architecture 2010 的插件)中尝试了明显的路径:code.interact()
设置 IronPython 引擎以使用 .NET 流STDIN
和STDOUT
. 然后我将这些重定向到一个TextBox
控件。它有点工作,但实际上只是一个丑陋的黑客。
主要问题是让所有的 shell 工作:向上箭头和向下箭头用于历史记录、编辑、复制和粘贴、EOF、语法突出显示、工具提示等。要做到这一点需要做很多工作,而且并不是我真正要解决的问题(我试图在 Revit 中托管一个交互式 shell,而不是制作完美的 shell GUI)。
如果这不是一个 .NET 项目,我可能会考虑重用PyCrust/PyWrap,但我不确定这是否可以从 WinForms 项目中完成。.NET 有类似的东西吗?
有没有人实现过这个IConsole
接口并且可以展示一个我需要做什么的例子?看来这将是正确的路线(而不是使用code
模块),但对于我的生活,我无法弄清楚。IronPython 源代码没有任何注释。
更新:在尝试了一些东西之后,我最终选择了出色的IronLab代码。它包括一个带有语法突出显示的示例 shell。代码很好,易于集成。检查 RevitPythonShell 代码,了解如何嵌入它的提示。