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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM