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