前言

IronPython 是一种在 .NET 及 Mono上的 Python 实现,由微软的 Jim Hugunin(同时也是 Jython 创造者) 所发起,是一个开源的项目,基于微软的 DLR 引擎。在 2007 年,开发者决定改写构架,使用动态类型系统以让更多脚本语言能很容易地移植到NET Framework上。IronPython 的官方并未实现 Python 通用类库,仅实现了部分核心类,社区的开源类库实现有:

fepy(http://fepy.sourceforge.net/):fepy 为 IronPython 提供 Python 的大多数通用类库的实现。

Test For IronPython

(1)在VS2017中新建窗体项目:IronPythonTest.

(2)VS菜单栏工具中打开“Nuget程序包管理器”:

(3)搜索IronPython程序包并安装:

(4)安装成功后,在exe程序所在文件夹下(也可以在其他目录下,通过指定相对路径),创建Python脚本:

示例(实现求两个数的四则运算)

num1=arg1
num2=arg2
op=arg3
if op==1:
result=num1+num2
elif op==2:
result=num1-num2
elif op==3:
result=num1*num2
else:
result=num1*1.0/num2

(5)修改工程的配置文件App.config:

(6)计算按钮的点击事件:

private void btnCalculate_Click(object sender, EventArgs e)
{
ScriptRuntime scriptRuntime = ScriptRuntime.CreateFromConfiguration();
ScriptEngine rbEng = scriptRuntime.GetEngine("python");
ScriptSource source = rbEng.CreateScriptSourceFromFile("hello.py");
ScriptScope scope = rbEng.CreateScope(); try
{
//设置参数
scope.SetVariable("arg1", Convert.ToInt32(txtNum1.Text));
scope.SetVariable("arg2", Convert.ToInt32(txtNum2.Text));
scope.SetVariable("arg3", operation.SelectedIndex + 1);
}
catch (Exception)
{
MessageBox.Show("输入有误。");
} source.Execute(scope);
labelResult.Text = scope.GetVariable("result").ToString();
}  

其中,我们需要使用的类型:

  • ScriptEngine: 动态语言(IronPython)执行类,可于解析和执行动态语言代码。
  • ScriptScope:构建一个执行上下文,其中保存了环境及全局变量;宿主(Host)可以通过创建不同的 ScriptScope 来提供多个数据隔离的执行上下文。
  • ScriptSource:操控动态语言代码的类型,可以编译(Compile)、运行(Execute)代码。

可参考相关文章:

使用IronPython集成Python和.NET

跨语言和跨编译器的那些坑(CPython vs IronPython)

IronPython和C#交互(重点推荐)

最新文章

  1. SikuliX简介及安装
  2. mydumper 和 myloader 的使用
  3. 基于Lattice_CPLD/FPGA Diamond 开发流程
  4. odoo定时任务
  5. [LeetCode]题解(python):043-Multiply Strings
  6. js拖拽换位置,使用数组方法
  7. javascript中的动画的实现以及运动框架的编写(1)
  8. Delphi接口的底层实现(接口在内存中仍然有其布局,它依附在对象的内存空间中,有汇编解释)——接口的内存结构图,简单清楚,深刻 good
  9. make 2>&1 | tee log.txt之小析
  10. asyncio
  11. asp.net应用发布到IIS无法链接到oracle数据库
  12. 面向对象select方法
  13. NODE_ENV=production关于不同系统的写法
  14. 神州数码广域网PPP封装CHAP认证配置
  15. Ros使用Arduino 2 使用rosserial创建一个publisher
  16. 使用安装 php-memcache-client
  17. django http404 详解
  18. Win10+vs2012+cuda8.0的安装与配置
  19. ASP.NET 防止重复提交提示层
  20. struts2将数据通过Json格式显示于EasyUI-datagrid数据表格

热门文章

  1. 日常训练 dfs 之 拓扑排序
  2. 2292: Quality of Check Digits 中南多校 暴力枚举
  3. 写了12年JS也未必全了解的连续赋值运算
  4. js如何判断对象是否为空
  5. C#基于wpf编写的串口调试助手
  6. [HEOI2016/TJOI2016]排序
  7. Oracle 11gR1 RAC存储迁移方案
  8. linux 应用和发展
  9. C++ —— 返回数组指针的函数 和 返回指向函数的指针的函数
  10. CRectTracker类的使用