博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#Note13:如何在C#中调用python
阅读量:5907 次
发布时间:2019-06-19

本文共 1524 字,大约阅读时间需要 5 分钟。

 前言

IronPython 是一种在 .NET 及 Mono上的 Python 实现,由微软的 Jim Hugunin(同时也是 Jython 创造者) 所发起,是一个开源的项目,基于微软的 DLR 引擎。在 2007 年,开发者决定改写构架,使用动态类型系统以让更多脚本语言能很容易地移植到上。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)代码。

 

 

可参考相关文章:

(重点推荐)

转载于:https://www.cnblogs.com/carsonzhu/p/7260699.html

你可能感兴趣的文章
(C#)AJAX post方式传值
查看>>
【转】Installing the libv8 Ruby gem on Centos 5.8
查看>>
【原创】宿主机远程登录虚拟机(windows server 2003系统)
查看>>
【甘道夫】HBase(0.96以上版本号)过滤器Filter具体解释及实例代码
查看>>
HANDLER命令与实现
查看>>
Linux(Centos)之安装tomcat并且部署Java Web项目
查看>>
MySQL中四舍五入的实现
查看>>
单月销量突破300万台,OPPO R9s为何连破纪录?
查看>>
春运第七天 北京西站铁警为“马大哈”旅客找回物品300余件
查看>>
中国2019年基本实现全国建制村直接通邮
查看>>
区块链傻瓜书:EOS与以太坊对比
查看>>
如何设计并实现一个线程安全的 Map ?(上篇)
查看>>
JavaScript的工作原理:解析、抽象语法树(AST)+ 提升编译速度5个技巧
查看>>
react-step-by-step之redux详细注释
查看>>
随手打造一个可以替换全站字符串的nginx镜像(docker)
查看>>
前端开发,关于图片的那些事
查看>>
对于一致性哈希算法的理解
查看>>
初识Spring —— Bean的装配(二)
查看>>
腾讯云上 PhantomJS 用法示例
查看>>
从函数调用到函数式编程
查看>>