C#使用IronPython調(diào)用Python
一、簡(jiǎn)介
IronPython 是一種在 NET 和 Mono 上實(shí)現(xiàn)的 Python 語(yǔ)言,由 Jim Hugunin(同時(shí)也是 Jython 創(chuàng)造者)所創(chuàng)造。
Python是一種跨平臺(tái)的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言。 是一個(gè)高層次的結(jié)合了解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮哪_本語(yǔ)言。
Python是一種解釋型腳本語(yǔ)言,可以應(yīng)用于以下領(lǐng)域:
● 科學(xué)計(jì)算和統(tǒng)計(jì)
● 人工智能
● 桌面界面開(kāi)發(fā)
● 軟件開(kāi)發(fā)
● 后端開(kāi)發(fā)
● 網(wǎng)絡(luò)爬蟲(chóng)
二、創(chuàng)建 C# 項(xiàng)目
新建一個(gè) Winform 項(xiàng)目 CSharpCallPython
為了更方便的看到控制臺(tái)打印的效果,在 項(xiàng)目屬性 --> 應(yīng)用程序 將輸出類型改為控制臺(tái)輸出
三、C# 調(diào)用 Python
1.IronPython 插件
在 NuGet 中安裝 IronPython 插件
在項(xiàng)目的 Debug 目錄下添加一個(gè) 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)
此時(shí),Python 的工作就完成了,接下來(lái)我們繼續(xù)完成 C# 剩余的邏輯。
winform 界面只需要添加一個(gè)按鈕即可
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); } } }
運(yùn)行后,點(diǎn)擊按鈕后效果:
2.調(diào)用 Python.exe 程序執(zhí)行
調(diào)用 python.exe 文件執(zhí)行后,由 exe 文件返回執(zhí)行結(jié)果,需要安裝 python,下面的代碼我試了幾次,根本沒(méi)有效果,返回值都是null,可能是個(gè)人配置出了問(wèn)題,這里就展示一下吧。
C# 代碼參考:
Process p = new Process(); //環(huán)境安裝路徑 (已經(jīng)配置了系統(tǒng)變量,所以可以直接寫(xiě)python.exe) p.StartInfo.FileName = @"python.exe"; //dll+空格+參數(shù) p.StartInfo.Arguments = @"D:\Develop\TEST\OCR\OCRdemo.py 2 3";//參數(shù)以空格分隔,如果某個(gè)參數(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文件,然后將其做成動(dòng)態(tài)鏈接庫(kù)(dll),在 C# 中調(diào)用此dll文件,這種方式很復(fù)雜,并且受 python 版本、(python/vs)32/64位影響,而且要求用戶必須安裝python運(yùn)行環(huán)境。
總結(jié)
到此這篇關(guān)于C#使用IronPython調(diào)用Python的文章就介紹到這了,更多相關(guān)C#調(diào)用Python內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#調(diào)用sql2000存儲(chǔ)過(guò)程方法小結(jié)
這篇文章主要介紹了C#調(diào)用sql2000存儲(chǔ)過(guò)程的方法,以實(shí)例形式分別對(duì)調(diào)用帶輸入?yún)?shù)及輸出參數(shù)的存儲(chǔ)過(guò)程進(jìn)行了詳細(xì)分析,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-10-10C#中parallel.foreach實(shí)現(xiàn)多線程處理
Parallel.ForEach方法是C#中的一個(gè)并行循環(huán)方法,它可以并行地對(duì)一個(gè)集合進(jìn)行迭代操作,本文主要介紹了C#中parallel.foreach實(shí)現(xiàn)多線程處理,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02C#實(shí)現(xiàn)向數(shù)組指定索引位置插入新的元素值
這篇文章給大家介紹了利用C#實(shí)現(xiàn)向數(shù)組指定索引位置插入新的元素值,首先需要定義一個(gè)一維數(shù)組,然后修改數(shù)組的長(zhǎng)度,從而在其中增加一個(gè)元素,需要的朋友可以參考下2024-02-02DevExpress之ChartControl實(shí)現(xiàn)時(shí)間軸實(shí)例
這篇文章主要介紹了DevExpress中ChartControl實(shí)現(xiàn)時(shí)間軸的方法,涉及相關(guān)C#繪圖程序用法,具有一定的實(shí)用價(jià)值,需要的朋友可以參考下2014-10-10C#使用Socket實(shí)現(xiàn)局域網(wǎng)聊天
這篇文章主要為大家詳細(xì)介紹了C#使用Socket實(shí)現(xiàn)局域網(wǎng)聊天的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05C#程序提示“正由另一進(jìn)程使用,因此該進(jìn)程無(wú)法訪問(wèn)該文件”的解決辦法
這篇文章主要介紹了C#程序提示“正由另一進(jìn)程使用,因此該進(jìn)程無(wú)法訪問(wèn)該文件”的解決辦法,本文通過(guò)改寫(xiě)程序代碼實(shí)現(xiàn)解決這個(gè)問(wèn)題,需要的朋友可以參考下2015-06-06C#實(shí)現(xiàn)手機(jī)拍照并且保存水印照片
這篇文章主要介紹了C#實(shí)現(xiàn)手機(jī)拍照并且保存水印照片的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11C#實(shí)現(xiàn)兩個(gè)時(shí)間相減的方法
這篇文章主要介紹了C#實(shí)現(xiàn)兩個(gè)時(shí)間相減的方法,實(shí)例分析了C#針對(duì)時(shí)間操作的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01