最近做一个Python和C#的交互写个记录

#coding=utf-8 加上这个python支持中文

python调用C#中的方法

import clr;

#加载DLL文件三种方式

#clr.AddReference("Python.Core")

#clr.AddReferenceToFile("Python.Core.dll");

clr.AddReferenceToFileAndPath("D:\\Python.Core.dll");

#导入命名空间

from test import FuncOfPython;

如果是静态方法就可以直接FuncOfPython.Test()来调用

实例成员的话

pythonTest=test();

pythonTest.Test()

最开始是使用Nuget安装的IronPython,这样安装没有基本类库,后来去官网下载安装,然后引用DLL。

public static dynamic ExcutePython(string algorithm, string pyStr, string funName, dynamic par)

{

//判断是否存在字典中

if (!scriptDic.ContainsKey(algorithm))

{

//创建Python引擎,DLR 动态语言执行类,用于解析和执行动态脚本

ScriptEngine engine = Python.CreateEngine();

//设置基本类库的路径

ICollection paths = engine.GetSearchPaths();

paths.Add(@"D:\工具安装\IronPython-2.7.5\Lib");

engine.SetSearchPaths(paths);

//创建一个执行上下文,其中保存了环境及全局变量。宿主(Host)可以通过创建不同的 ScriptScope 来提供多个数据隔离的执行上下文。

ScriptScope scope = engine.CreateScope();

//操控动态语言代码的类型,我们可以编译(Compile)、读取(Read Code Lines)或运行(Execute)代码。

ScriptSource source = engine.CreateScriptSourceFromString(pyStr);

//运行输入脚本

dynamic context = source.Execute(scope);

Tuple temp = Tuple.Create(engine, scope, source);

scriptDic.Add(algorithm, temp);

}

//从字典中取出

Tuple script = scriptDic[algorithm];

//调用方法,并传参数

Func result = script.Item2.GetVariable>(funName);

return result(par);

}

上面是我封装的方法动态执行脚本。

其实也可以context.你脚本中的方法来执行也是没有问题的

注意要版本一致,不一致也会出现这个问题,我是Nuget安装的2.7.7版本,然后去官网下载2.7.7版本的mis文件,安装完事,可以直接引用第三方包

第三方包踩坑:

编写的文件打印出来的地址与安装标准包安装地址不匹配,导致引入第三方会报错

No module named random

后来查下资料,打印出来的路径指向是我程序路径,修改下就好了,打印路径方法

#打印第三方包路径

#import sys

#print sys.path

设置第三方包路径的相关代码

//设置第三方包路径

List Paths = new List();

Paths.Add(PythonPackage);

engine.SetSearchPaths(Paths);

这样就可以引用安装的python标准包了。

但是有个地方,没有弄明白,如果是解压版的IronPython,引用第三方包如果不是.py文件,比如time模块,这种是c写的包,解压版本引入会报错,引入不了,如果安装版本的IronPython,就可以引用。

踩坑2:

IronPython random 随机数模块存在个问题,生成的随机数不会超过设定值的一半,比如:

import random

random.randint(0,4)

生成的随机数会出现0,1,2永远不会出现3,4,原因未知。

解决方案1:既然是一半,就*2

解决方案2:调用c#的Random类来实现

import System

from System import Random

r=Random()

r.Next(0,100)

踩坑3:

在练习的时候发现一个问题,调试模式下运行py,其中调用C#中的类,例如from System import Math,会一直报一个错误,IronPython.Runtime.Exceptions.ImportException not a Zip file,很奇怪为什么出现,后来找遍国内资源没有找到,后来在国外一网站发现一小伙也有这个问题,然后茅塞顿开,出现这个问题是仅在调试模式出现,直接运行是没有这个问题的,出现这个错误多按几次F5调过去,是可以过去的。

ironpython教程_IronPython教程相关推荐

  1. ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 异常和错误处理 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 异常和错误处理 上一章节中,我们学习了 ASP.NET Cor ...

  2. python菜鸟教程字典-python教程菜鸟教程学习路线

    python教程菜鸟教程学习路线,需要学Python 环境搭建.Python 中文编码.Python 基础语法.Python 变量类型.Python 运算符.Python 条件语句.Python 循环 ...

  3. ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core macOS 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core macOS 环境配置 - ASP.NET Core 基础 ...

  4. ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 标签助手 上一章节我们介绍了视图导入,学习了 ...

  5. ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单 ...

  6. ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单 ...

  7. ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core Identity 迁移数据 - ASP.NET C ...

  8. QT5.10.0安装教程图文教程以及安装成功QT5.10.0后环境配置图文步骤

    引用:https://www.cnblogs.com/chenmingjun/p/8392713.html QT5.10.0安装教程图文教程以及安装成功QT5.10.0后环境配置图文教程 文章目录 Q ...

  9. ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Windows 环境配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Windows 环境配置 ASP.NET Core ...

最新文章

  1. golang goroutine 得到返回值
  2. 理性预期学派(Rational Expectation School)
  3. 数据的中心化和标准化
  4. 2010年06月12日
  5. 使用C#开发交互式命令行应用
  6. 八个角最多可以把平面分成多少部分?_为什么越来越多的空间无主灯了?
  7. ES6之导入模块时的内存共享
  8. 使用PopWindow时距离边界有间隙的解决办法
  9. 通达信 python_python 适用通达信
  10. 初学java网络编程的一些总结
  11. R 包 rgl 安装失败, 报错 X11 not found but required, configure aborted 及解决方法
  12. 苹果APP Store应用上架流程
  13. Win10 重装系统后,在此计算机上自动解锁此驱动器,提示:数据错误(循环冗余检查)
  14. php strpos 编码问题,php-关于strpos的问题。 如何获得第二次出现的字符串?
  15. mysql graler_安装Linux后常用的操作以及踩坑记录
  16. android 接入百度地图sdk
  17. 使用matlab的MAT.H(c读取mat文件)
  18. 第二章(第三部分) 出发之前
  19. 英辞流——坚若金刚与穿行无碍:物质的三态
  20. 【语音识别】基于mfcc特征模板匹配算法实现声纹识别matlab源码含GUI

热门文章

  1. vs2019 release模式调试:此表达式有副作用,将不予计算。
  2. 插入损耗——线对上的信号衰减
  3. 在linux下nice用法,Linux下nice/renice命令小结
  4. 高斯判别算法GDA(吴恩达机器学习c#实践,生成高斯模板显示同心圆马氏距离,一)
  5. 43、手机杀毒--代码实现
  6. 小谈导数、梯度和极值
  7. 用VB写歌词搜索程序
  8. 免越狱苹果群控巽风投屏中控
  9. ES6数组find实现嵌套数据匹配
  10. hadoop mapreduce相关类 FileInputFormat