13

我正在使用标准 python 安装附带的教程学习 python。作者所说的关于 python 的好处之一是“也许你已经编写了一个可以使用扩展语言的程序,而你不想为你的应用程序设计和实现一种全新的语言”——我的问题是如何我开始设计一个可以使用 Python 交互扩展的程序(使用 c#)(为了实现这一点,我想我需要为 .net 程序创建某种“shell”或“交互”模式) ?

是否有关于如何设计具有交互式外壳的 .NET 程序的任何指示。然后我想在 shell 中使用 python 脚本来“扩展”或与程序交互。

编辑:这个问题部分源于 Miguel de Icaza 在 PDC 2008 期间提供的演示,他展示了交互式 csharp 命令提示符,我认为 C# 4.0 也具有此“编译器即服务”功能。我看了看,想在 .NET 中设计一个具有交互式 shell 的 Windows 或 Web 程序是多么酷……并且可以使用像 python 这样的脚本语言来扩展程序提供的功能。

此外,在阅读了 Steve Yegge 的一篇文章后,我开始考虑这种功能,他谈到了永生的系统。

4

6 回答 6

12

这听起来像是IronPython的一个很好的用途。

从 C# 设置一个简单的脚本主机以允许调用 IronPython 脚本以及允许 IronPython 调用您的 C# 代码是相当容易的。CodePlex 网站上的示例和示例展示了如何执行此操作。

另一个很好的示例和示例站点是ironpython.info

是一个专门用于回答您的问题的示例的页面,尽管是以通用的以 DLR 为中心的方式——这将允许您托管 IronPython、IronRuby 或您想要支持的任何 DLR 语言。

过去我曾使用这些示例在ScrewTurn Wiki的私有安装中创建IronPython 环境——它允许我创建非常富有表现力的Wiki 模板,并且总体上被证明非常有用。

于 2009-04-30T19:45:40.223 回答
3

我正在寻找相同问题的解决方案,并找到 IronTextBox: http: //www.codeproject.com/KB/edit/irontextbox2.aspx

它需要对当前版本进行一些调整,但似乎是我需要的一切。首先使其编译,然后将我想从 shell 访问的变量添加到范围。

于 2009-04-30T20:53:52.930 回答
1

Python 作为一种扩展语言被称为“嵌入 Python”。

您可以通过基本调用 python 解释器从 c++ 调用 python 模块并让它执行 python 源代码。这称为嵌入

它适用于 C 和 C++,并且可能也适用于 C#。

不,您不需要任何类型的“外壳”。虽然 Python 可以是交互式的,但这根本不是必需的。

于 2009-04-30T20:05:49.597 回答
1

这是一篇关于添加 IronRuby 以编写 C# 应用程序脚本的博客文章的链接。

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

这些原则也适用于使用 IronPython。

于 2009-04-30T20:15:16.737 回答
1

如果您的目标是避免学习一门新语言,您可以使用CSScript.Net和用 C# 或 VB 编写的嵌入脚本到您的应用程序中。使用 CSScript,您可以完全访问 CLR。支持三种不同的脚本执行模型,以便您可以执行引用当前应用程序域中的对象的脚本、使用远程处理执行或作为 shell 执行。

目前,我使用 CCScript 作为“胶水”代码来配置应用程序对象,这有点类似于使用 Boo。

链接将引导您阅读代码项目文章,该文章提供了很好的概述。

于 2009-06-27T11:33:14.207 回答
0

我不知道你是什么意思

“扩展”或与程序交互

所以我无法回答你的问题。能给我举个例子吗?

Mono 中有一个开源的交互式 C# shell:http ://www.mono-project.com/CsharpRepl

当你喜欢 python、.Net 和语言扩展时,你可能会喜欢Boo over Iron python。Boo 也带有一个开源的交互式外壳。

我不同意

“你不想为你的应用程序设计和实现一种全新的语言”

创建一个简单的 DSL 不像以前那么难了。实施不需要几天,只需几个小时。这可能是一个有趣的选择。

于 2009-04-30T19:52:54.357 回答