C#中调用python方法
最近因为项目设计,有部分使用Python脚本,因此代码中需要调用python方法。
1.首先,在c#中调用python必须安装IronPython,在 http://ironpython.codeplex.com/ 中下载
2.对应用程序添加IronPython.dll和Microsoft.Scripting.dll 的引用

3.调用python:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IronPython.Hosting;
using Microsoft.Scripting.Hosting; namespace WpfUsingPythonDemo
{
public class UsingPython
{
private ScriptRuntime pyRuntime = null;
private dynamic obj = null;
public UsingPython()
{
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 bool ExcutePython()
{
try
{
if (null != obj)
{
obj.frs_init();//调用frs_main.py中的方法
}
else
{
return false;
}
return true;
}
catch(Exception ex)
{
throw ex;
}
}
}
}
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<string> 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);
}
这是自己摸索找到的解决方案,希望以后可以有更好的方法。
C#中调用python方法的更多相关文章
- 在java中调用python方法
1.http://sourceforge.net/projects/jython/下载jython包,把其中的jython.jar添加到工程目录 示例: 1.摘自:http://blog.csdn.n ...
- odoo14 button 事件调用python方法如何传递参数
1 <field name="user_ids" 2 mode="kanban" 3 nolabel="1" 4 options=&q ...
- Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)
Python 在子类中调用父类方法详解(单继承.多层继承.多重继承) by:授客 QQ:1033553122 测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...
- python基础----继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法
一.什么是继承 继承是一种创建新的类的方式,在pyth ...
- python基础之类的继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法
一.什么是继承 继承是一种创建新的类的方式,新建的类可以继承自一个或者多个父类,原始类称为基类或超类,新建的类称为派生类或子类. 派生:子类继承了父类的属性,然后衍生出自己新的属性,如果子类衍生出的新 ...
- 如何在Java中调用Python代码
有时候,我们会碰到这样的问题:与A同学合作写代码,A同学只会写Python,而不会Java, 而你只会写Java并不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方设法“调 ...
- 在Java中调用Python
写在前面 在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢.当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单.恰好我在项目中就遇到了这个问题 ...
- 在Java中调用Python代码
极少数时候,我们会碰到类似这样的问题:与A同学合作写代码, A同学只会写Python,不熟悉Java ,而你只会写Java不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方 ...
- 在QT C++中调用 Python并将软件打包发布(裸机可运行)
为了提高工作效率,需要一个可以自动生成多份相关联的word文档免去繁琐复制粘贴工作的软件.最后选定使用QT C++做界面和主要逻辑程序设计,对word的操作使用python写好对应的函数,然后在QT中 ...
随机推荐
- SQL Server 通用分页存储过程
create proc commonPagination ), --要显示的列名,用逗号隔开 ), --要查询的表名 ), --排序的列名 ), --排序的方式,升序为asc,降序为 desc ), ...
- 技术英文单词贴--I
I increase 增加,增大 individual 个人的,个别的 instead 代替 integer 整数,整形
- SVN服务器搭建之提交日志模版构建
SVN服务器搭建之提交日志模版构建 日志提交有两种 一种是自己客户端设置提交日志模版,这个只适用于自己,没办法强制性运用到项目中,只能依照每个人的自觉性来处理. 第二种方法是SVN服务器设置提交日志模 ...
- [刘阳Java]_MyBatis_常规标签的用法_第6讲
一般MyBatis最基本标签,或者说初学者上手最快的标签就是增删改查 1.<insert>标签,在MyBatis中完成数据添加操作 <insert id="addMyUse ...
- L440 无线网卡:由于该设备有问题,Windows 已将其停止(代码 43)
最近重装了系统,本来用的好好的,结果重启之后突然无线网卡不能用了,设备管理器老是黄色叹号!无线网卡设备状态:由于该设备有问题,Windows 已将其停止. (代码 43). 无线网卡型号:2 ...
- java多线程详解(8)-volatile,Atomic比较
在变成过程中我们需要保证变量的线程安全,在java中除了使用锁机制或者Threadlocal等保证线程安全,还提供了 java.util.concurrent.atomic.Atomic*(如Atom ...
- C# log4net输出发生错误的行号
别人调用我写的接口,总是报错,但我这测试是没问题的,就想着用log4net来跟踪一下. 跟踪后,发现接口确实有出错的日志,但是没有具体出错的地方. 通过输出日志的方式,跟踪不是很方便,就想着log4n ...
- Java线程池入门
序 为什么要用线程池?什么情况下才会用到线程池? 并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间. 因此 ...
- spring mvc(1):基础入门
依赖 pom.xml ( maven ) <properties> <spring.version>3.0.5.RELEASE</spring.version> ...
- whoami与who am i
whoami显示的是当前“操作用户”的用户名,而who am i显示的是“登录用户”的用户名. 若你使用root用户登录,中间su abc切换,whoami的结果是abc,who am i 的结果是r ...