最近看了些關於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
