如何在应用程序中嵌入图形交互式IronPython命令行?
我在我的开源项目 RevitPythonShell(这是一个为建筑建模软件Autodesk Revit Architecture 2010开发的插件)中尝试了一些明显的方法:使用 code.interact()
,并把IronPython引擎设置为使用.NET流来处理 STDIN
和 STDOUT
。然后我把这些重定向到一个 TextBox
控件里。虽然这样做有点效果,但实际上只是个不太好看的临时解决办法。
主要的问题是让所有的命令行功能正常工作,比如:用上箭头和下箭头查看历史记录、编辑、复制和粘贴、文件结束符(EOF)、语法高亮、工具提示等等。要把这些搞定需要花费很多精力,而这并不是我真正想解决的问题(我想要的是在Revit中实现一个交互式的命令行,而不是制作一个完美的命令行界面)。
如果这不是一个.NET项目,我可能会考虑重用 PyCrust/PyWrap,但我不确定在WinForms项目中是否能做到这一点。有没有类似的东西可以在.NET中使用?
有没有人实现过 IConsole
接口,并能给我一个示例,告诉我该怎么做?看起来这应该是正确的方向(而不是使用 code
模块),但我实在搞不明白。IronPython的源代码完全没有注释。
更新:经过一番尝试,我最终选择了出色的 IronLab 代码。它包含了一个带有语法高亮的示例命令行,所有功能都很齐全。这个代码很容易集成。可以查看RevitPythonShell的代码,里面有关于如何嵌入它的提示。
2 个回答
好的,我这里有两个可能的答案。一个在上面的评论里……还有一个更简单的(没有智能提示,也没有语法高亮):
http://www.codeproject.com/KB/edit/irontextbox2.aspx
这个是JoeSox写的,适用于IronPython 2,而不是2.6。不过我花了大约五分钟就把它更新到可以在2.6上正常工作。如果你感兴趣,我可以想办法把更新的文件发给你,或者把更新后的项目放到某个地方(它是以MIT许可证发布的)。
希望你喜欢!
大卫
我在找类似的东西时,发现了IronLab项目里面有一个不错的IronPython控制台。你可以在这里找到源代码 https://github.com/rwg0/ironlab/tree/master/IronPythonConsole。
[编辑于2016年10月25日] 修复了坏掉的链接