10

我在我的宠物开源项目RevitPythonShell(建筑建模软件 Autodesk Revit Architecture 2010 的插件)中尝试了明显的路径:code.interact()设置 IronPython 引擎以使用 .NET 流STDINSTDOUT. 然后我将这些重定向到一个TextBox控件。它有点工作,但实际上只是一个丑陋的黑客。

主要问题是让所有的 shell 工作:向上箭头和向下箭头用于历史记录、编辑、复制和粘贴、EOF、语法突出显示、工具提示等。要做到这一点需要做很多工作,而且并不是我真正要解决的问题(我试图在 Revit 中托管一个交互式 shell,而不是制作完美的 shell GUI)。

如果这不是一个 .NET 项目,我可能会考虑重用PyCrust/PyWrap,但我不确定这是否可以从 WinForms 项目中完成。.NET 有类似的东西吗?

有没有人实现过这个IConsole接口并且可以展示一个我需要做什么的例子?看来这将是正确的路线(而不是使用code模块),但对于我的生活,我无法弄清楚。IronPython 源代码没有任何注释。

更新:在尝试了一些东西之后,我最终选择了出色的IronLab代码。它包括一个带有语法突出显示的示例 shell。代码很好,易于集成。检查 RevitPythonShell 代码,了解如何嵌入它的提示。

4

2 回答 2

7

我一直在寻找类似的东西,我发现 IronLab 项目包含一个不错的 IronPython 控制台。源代码可以在这里找到https://github.com/rwg0/ironlab/tree/master/IronPythonConsole

[编辑于 25/10/2016] 修复了损坏的网址

于 2012-03-21T19:59:35.150 回答
3

好的,那么我有两个可能的答案。上面评论中的一个....另一个更简单(没有智能感知,没有语法突出显示):

http://www.codeproject.com/KB/edit/irontextbox2.aspx

它由 JoeSox 编写,适用于 IronPython 2,而不是 2.6。但是,我能够在大约五分钟内将其更新为与 2.6 一起正常工作。如果您有兴趣,我可以想办法向您发送差异文件或在某处拍打更新的项目(它是在 MIT 许可下发布的)。

享受!

大卫

于 2010-03-04T20:00:44.890 回答