C#使用IronPython調(diào)用Python
一、簡介
IronPython 是一種在 NET 和 Mono 上實現(xiàn)的 Python 語言,由 Jim Hugunin(同時也是 Jython 創(chuàng)造者)所創(chuàng)造。
Python是一種跨平臺的計算機程序設(shè)計語言。 是一個高層次的結(jié)合了解釋性、編譯性、互動性和面向?qū)ο蟮哪_本語言。
Python是一種解釋型腳本語言,可以應(yīng)用于以下領(lǐng)域:
● 科學(xué)計算和統(tǒng)計
● 人工智能
● 桌面界面開發(fā)
● 軟件開發(fā)
● 后端開發(fā)
● 網(wǎng)絡(luò)爬蟲
二、創(chuàng)建 C# 項目
新建一個 Winform 項目 CSharpCallPython
為了更方便的看到控制臺打印的效果,在 項目屬性 --> 應(yīng)用程序 將輸出類型改為控制臺輸出
三、C# 調(diào)用 Python
1.IronPython 插件
在 NuGet 中安裝 IronPython 插件
在項目的 Debug 目錄下添加一個 Python 腳本 test.py ,
在 test.py 中添加下面的代碼:
def sayHi(): print("f**k you") def add(x,y): try: return x + y except Exception as err: return str(err) def arrSum(arr): try: sum = 0 for i in arr: sum += i return sum except Exception as err: return str(err)
此時,Python 的工作就完成了,接下來我們繼續(xù)完成 C# 剩余的邏輯。
winform 界面只需要添加一個按鈕即可
Form1 代碼:
using IronPython.Hosting; using Microsoft.Scripting.Hosting; using System; using System.Windows.Forms; namespace CSharpCallPython { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private string PythonScriptPath = string.Empty; private ScriptEngine PyEngine = null; private void Form1_Load(object sender, EventArgs e) { PythonScriptPath = Application.StartupPath + "\\test.py"; PyEngine = Python.CreateEngine(); } private void button1_Click(object sender, EventArgs e) { dynamic py = PyEngine.ExecuteFile(PythonScriptPath); py.sayHi(); var sum = py.add(3, 5); Console.WriteLine("add 方法的和是:{0}", sum); int[] arr = new int[3] { 2, 4, 6 }; var sum1 = py.arrSum(arr); Console.WriteLine("數(shù)組的和是:{0}", sum1); } } }
運行后,點擊按鈕后效果:
2.調(diào)用 Python.exe 程序執(zhí)行
調(diào)用 python.exe 文件執(zhí)行后,由 exe 文件返回執(zhí)行結(jié)果,需要安裝 python,下面的代碼我試了幾次,根本沒有效果,返回值都是null,可能是個人配置出了問題,這里就展示一下吧。
C# 代碼參考:
Process p = new Process(); //環(huán)境安裝路徑 (已經(jīng)配置了系統(tǒng)變量,所以可以直接寫python.exe) p.StartInfo.FileName = @"python.exe"; //dll+空格+參數(shù) p.StartInfo.Arguments = @"D:\Develop\TEST\OCR\OCRdemo.py 2 3";//參數(shù)以空格分隔,如果某個參數(shù)為空,可以傳入”” p.StartInfo.UseShellExecute = false; //必需 p.StartInfo.RedirectStandardOutput = true;//輸出參數(shù)設(shè)定 p.StartInfo.RedirectStandardInput = true;//傳入?yún)?shù)設(shè)定 p.StartInfo.CreateNoWindow = true; p.Start(); string output = p.StandardOutput.ReadToEnd(); p.WaitForExit();//等待外部程序退出后才能往下執(zhí)行} Console.Write(output);//輸出 p.Close();
另外,還有其他的一些調(diào)用的方式,比如使用 c++ 程序調(diào)用 python文件,然后將其做成動態(tài)鏈接庫(dll),在 C# 中調(diào)用此dll文件,這種方式很復(fù)雜,并且受 python 版本、(python/vs)32/64位影響,而且要求用戶必須安裝python運行環(huán)境。
總結(jié)
到此這篇關(guān)于C#使用IronPython調(diào)用Python的文章就介紹到這了,更多相關(guān)C#調(diào)用Python內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#調(diào)用sql2000存儲過程方法小結(jié)
這篇文章主要介紹了C#調(diào)用sql2000存儲過程的方法,以實例形式分別對調(diào)用帶輸入?yún)?shù)及輸出參數(shù)的存儲過程進行了詳細分析,非常具有實用價值,需要的朋友可以參考下2014-10-10C#中parallel.foreach實現(xiàn)多線程處理
Parallel.ForEach方法是C#中的一個并行循環(huán)方法,它可以并行地對一個集合進行迭代操作,本文主要介紹了C#中parallel.foreach實現(xiàn)多線程處理,具有一定的參考價值,感興趣的可以了解一下2024-02-02C#實現(xiàn)向數(shù)組指定索引位置插入新的元素值
這篇文章給大家介紹了利用C#實現(xiàn)向數(shù)組指定索引位置插入新的元素值,首先需要定義一個一維數(shù)組,然后修改數(shù)組的長度,從而在其中增加一個元素,需要的朋友可以參考下2024-02-02DevExpress之ChartControl實現(xiàn)時間軸實例
這篇文章主要介紹了DevExpress中ChartControl實現(xiàn)時間軸的方法,涉及相關(guān)C#繪圖程序用法,具有一定的實用價值,需要的朋友可以參考下2014-10-10C#程序提示“正由另一進程使用,因此該進程無法訪問該文件”的解決辦法
這篇文章主要介紹了C#程序提示“正由另一進程使用,因此該進程無法訪問該文件”的解決辦法,本文通過改寫程序代碼實現(xiàn)解決這個問題,需要的朋友可以參考下2015-06-06