为.NET应用创建交互式Shell并嵌入脚本语言如Python/IronPython

13 投票
6 回答
5003 浏览
提问于 2025-04-15 11:20

我在学习Python的时候,使用的是标准Python安装包里的教程。作者提到Python的一个好处是:“也许你写了一个程序,需要一个扩展语言,但你不想为你的应用程序设计和实现一个全新的语言。”我的问题是,我该如何设计一个可以用Python进行交互扩展的程序(使用C#)呢?为了实现这个功能,我想我需要为这个.NET程序创建一种“外壳”或“交互”模式。

有没有什么建议可以帮助我设计一个带有交互式外壳的.NET程序?我想在这个外壳中使用Python脚本来“扩展”或与程序进行交互。

编辑:这个问题部分来源于Miguel de Icaza在2008年PDC上展示的演示,他展示了交互式C#命令提示符。我觉得C# 4.0也有这个“编译器作为服务”的功能。我看到这个功能后,想象如果能设计一个带有交互式外壳的Windows或Web程序,那该多酷啊!而且可以用像Python这样的脚本语言来扩展程序提供的功能。

此外,我在阅读Steve Yegge的一篇文章时,开始思考这种功能,他谈到了那些能够永远存在的系统。

6 个回答

1

这里有一个博客的链接,讲的是如何把IronRuby添加到C#应用程序中,以便进行脚本编写。

http://blog.jimmy.schementi.com/2008/11/adding-scripting-to-c-silverlight-app.html

这些原理同样适用于使用IronPython。

3

我在找解决同样问题的方法时,发现了一个叫IronTextBox的东西:http://www.codeproject.com/KB/edit/irontextbox2.aspx

这个东西在现在的版本上需要稍微调整一下,但看起来正是我需要的。首先我让它能编译,然后添加了我想从命令行访问的变量。

12

这听起来是个很好的使用 IronPython 的方式。

从C#设置一个简单的脚本主机其实很简单,这样你就可以调用IronPython脚本,同时也可以让IronPython调用你的C#代码。CodePlex网站上有很多示例和案例,教你怎么做到这一点。

另一个提供示例和案例的好地方是 ironpython.info

还有 这个页面 专门提供了一个示例,正好回答了你的问题,虽然是以一种通用的DLR为中心的方式来讲解——这让你可以托管IronPython、IronRuby,或者你想支持的其他DLR语言。

我以前用过这些示例,在一个私有的 ScrewTurn Wiki 安装中创建了一个IronPython环境——这让我能够创建非常灵活的Wiki模板,并且在一般情况下非常有用。

撰写回答