python c#_C#中调用python方法

最近因为项目设计,有部分使用Python脚本,因此代码中需要调用python方法。

1.首先,在c#中调用python必须安装IronPython,在 http://ironpython.codeplex.com/ 中下载

2.对应用程序添加IronPython.dll和Microsoft.Scripting.dll 的引用

712896-20160315172653068-283042913.jpg

3.调用python:

ContractedBlock.gif

ExpandedBlockStart.gif

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingIronPython.Hosting;usingMicrosoft.Scripting.Hosting;namespaceWpfUsingPythonDemo

{public classUsingPython

{private ScriptRuntime pyRuntime = null;private dynamic obj = null;publicUsingPython()

{string serverpath = AppDomain.CurrentDomain.BaseDirectory + "frs_main.py";//所引用python路径

pyRuntime =Python.CreateRuntime();

ScriptEngine Engine= pyRuntime.GetEngine("python");

ScriptScope pyScope= Engine.CreateScope(); //Python.ImportModule(Engine, "random");

obj =Engine.ExecuteFile(serverpath, pyScope);

}public boolExcutePython()

{try{if (null !=obj)

{

obj.frs_init();//调用frs_main.py中的方法

}else{return false;

}return true;

}catch(Exception ex)

{throwex;

}

}

}

}

Using Python

4.c#中引用的python应该是IronPython,与CPython版本和模块中有差别,所以需要注意使用版本

5.因为所使用的python文件中引用了很多模块,所以运行时会找不到python库,在网上查了一下,需要引入搜索路径并且引入库,如下:

public UsingPython()

{

string serverpath = AppDomain.CurrentDomain.BaseDirectory + "frs_main.py";//所引用python路径

pyRuntime = Python.CreateRuntime();

ScriptEngine Engine = pyRuntime.GetEngine("python");

//手动设置搜索路径

ICollection Paths = Engine.GetSearchPaths();

Paths.Add("//Lib");

Paths.Add("//Lib//site-packages");

Paths.Add(AppDomain.CurrentDomain.BaseDirectory + "frs");

//importpy文件中的库,需要注意先后引用顺序

Engine.ImportModule("sys");

Engine.ImportModule("logging");

Engine.ImportModule("Queue");

Engine.ImportModule("ctypes");

Engine.ImportModule("json");

Engine.ImportModule("os");

ScriptScope pyScope = Engine.CreateScope(); //Python.ImportModule(Engine, "random");

obj = Engine.ExecuteFile(serverpath, pyScope);

}

这是自己摸索找到的解决方案,希望以后可以有更好的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值