c#调用python脚本(转)
最近看了些关于python的东西,虽然只是粗略的过了一下,还是觉得有些东西如果用python实现起来,比用c#实现要简洁的多,于是便有了c#和python混合开发的想法,网上查了一下,发现资料还挺多,也挺简单的,无非是调用了IronPython.dll这个动态链接库,而且使用这个dll运行python脚本,并不需要安装python解释器。下面是我写的一个小例子,最后会附上项目源码。
先新建一个Windows窗体项目:(项目名随便,我的项目叫“CSharpCallPython”,如果要借鉴的话,请把版权费转账到我支付宝,谢谢!)
项目建好后,应该需要开头说的那个大名鼎鼎的 IronPython 了。
关于这个IronPython,可以去他的官网下载,也可以使用vs的NuGet管理器下载,过程如下:
IronPython安装完成后,会自动在项目里添加下面这些引用,其实在我这个例子里只需要 IronPython.dll 和 Microsoft.Scripting.dll 就可以了,其他的都不需要,但我并没有把他们删掉~~~恩,就是没删掉。
在你的硬盘里随便找个地方,新建一个文本文件,将后缀名改为“.py”(我的这个文件夹叫 “test1.py”,我把它放在项目的 Debug 目录下了,是不是很出乎意料?),并写入以下python代码 (这段Python代码不受著作权保护,大家可以随便改,随便用,随便署名)
def main(arr): try: arr = set(arr) arr = sorted(arr) arr = arr[0:2] return str(arr) except Exception as err: return str(err)
该python代码的意思是,声明了一个main函数,接受一个python列表参数,然后对这个列表去重,排序,保留前两项其余项移除,并返回一个字符串;如还不明白,请去百度python教程,自己看。
然后回到vs里,在form上添加两个TextBox控件,再添加一个Button控件,第一个TextBox控件用来接收输入参数,第二个用来显示输出参数,而那个Button控件,我忘记是干嘛的了~~~
在Button控件的Click事件里添加下面这段代码(想起来了,Button是用来执行代码的。。。)
ScriptEngine pyEngine = Python.CreateEngine();//创建Python解释器对象 dynamic py = pyEngine.ExecuteFile(@"test1.py");//读取脚本文件 string dd = py.main(textBox1.Lines);//调用脚本文件中对应的函数 textBox2.Text += dd + "\r\n";
上面的 @”test1.py“ 就是刚才让你建的.py文件的路径,如果不在Debug目录下的话,你得改成相应的路径。然后开始运行,并且在 textBox1 里填几行内容,随便什么,然后勇敢的使用鼠标去点击那个神奇的 button 吧,好了,到目前为止已经搞定了,就是这么简单,下面是项目源码,源码里面除了这个方法之外,还提供了一种可以直接运行python代码字符串的方法,有需要的话,可以下载来看看。
微云:
http://share.weiyun.com/9708b00b24a5af7c477bddbe90408d35
百度云盘:
http://pan.baidu.com/s/1kVM3Rcb
最近看了些关于python的东西,虽然只是粗略的过了一下,还是觉得有些东西如果用python实现起来,比用c#实现要简洁的多,于是便有了c#和python混合开发的想法,网上查了一下,发现资料还挺多,也挺简单的,无非是调用了IronPython.dll这个动态链接库,而且使用这个dll运行python脚本,并不需要安装python解释器。下面是我写的一个小例子,最后会附上项目源码。
先新建一个Windows窗体项目:(项目名随便,我的项目叫“CSharpCallPython”,如果要借鉴的话,请把版权费转账到我支付宝,谢谢!)
项目建好后,应该需要开头说的那个大名鼎鼎的 IronPython 了。
关于这个IronPython,可以去他的官网下载,也可以使用vs的NuGet管理器下载,过程如下:
IronPython安装完成后,会自动在项目里添加下面这些引用,其实在我这个例子里只需要 IronPython.dll 和 Microsoft.Scripting.dll 就可以了,其他的都不需要,但我并没有把他们删掉~~~恩,就是没删掉。
在你的硬盘里随便找个地方,新建一个文本文件,将后缀名改为“.py”(我的这个文件夹叫 “test1.py”,我把它放在项目的 Debug 目录下了,是不是很出乎意料?),并写入以下python代码 (这段Python代码不受著作权保护,大家可以随便改,随便用,随便署名)
def main(arr): try: arr = set(arr) arr = sorted(arr) arr = arr[0:2] return str(arr) except Exception as err: return str(err)
该python代码的意思是,声明了一个main函数,接受一个python列表参数,然后对这个列表去重,排序,保留前两项其余项移除,并返回一个字符串;如还不明白,请去百度python教程,自己看。
然后回到vs里,在form上添加两个TextBox控件,再添加一个Button控件,第一个TextBox控件用来接收输入参数,第二个用来显示输出参数,而那个Button控件,我忘记是干嘛的了~~~
在Button控件的Click事件里添加下面这段代码(想起来了,Button是用来执行代码的。。。)
ScriptEngine pyEngine = Python.CreateEngine();//创建Python解释器对象 dynamic py = pyEngine.ExecuteFile(@"test1.py");//读取脚本文件 string dd = py.main(textBox1.Lines);//调用脚本文件中对应的函数 textBox2.Text += dd + "\r\n";
上面的 @”test1.py“ 就是刚才让你建的.py文件的路径,如果不在Debug目录下的话,你得改成相应的路径。然后开始运行,并且在 textBox1 里填几行内容,随便什么,然后勇敢的使用鼠标去点击那个神奇的 button 吧,好了,到目前为止已经搞定了,就是这么简单,下面是项目源码,源码里面除了这个方法之外,还提供了一种可以直接运行python代码字符串的方法,有需要的话,可以下载来看看。
微云:
http://share.weiyun.com/9708b00b24a5af7c477bddbe90408d35
百度云盘:
http://pan.baidu.com/s/1kVM3Rcb
文章出处https://www.cnblogs.com/shiyingzheng/p/6054835.html
转载自:https://blog.csdn.net/tjhd408/article/details/80917489