最近看了些关于python的东西,虽然只是粗略的过了一下,仍是以为有些东西若是用python实现起来,比用c#实现要简洁的多,因而便有了c#和python混合开发的想法,网上查了一下,发现资料还挺多,也挺简单的,无非是调用了IronPython.dll这个动态连接库,并且使用这个dll运行python脚本,并不须要安装python解释器。下面是我写的一个小例子,最后会附上项目源码。python
先新建一个Windows窗体项目:(项目名随便,个人项目叫“CSharpCallPython”,若是要借鉴的话,请把版权费转帐到我支付宝,谢谢!)c#
项目建好后,应该须要开头说的那个大名鼎鼎的 IronPython 了。函数
关于这个IronPython,能够去他的官网下载,也能够使用vs的NuGet管理器下载,过程以下:spa
IronPython安装完成后,会自动在项目里添加下面这些引用,其实在我这个例子里只须要 IronPython.dll 和 Microsoft.Scripting.dll 就能够了,其余的都不须要,但我并无把他们删掉~~~恩,就是没删掉。code
在你的硬盘里随便找个地方,新建一个文本文件,将后缀名改成“.py”(个人这个文件夹叫 “test1.py”,我把它放在项目的 Debug 目录下了,是否是很出乎意料?),并写入如下python代码 (这段Python代码不受著做权保护,你们能够随便改,随便用,随便署名)orm
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控件,我忘记是干吗的了~~~blog
在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