<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
IronPython是一種在 .NET及 Mono上的 Python實現,由微軟的 Jim Hugunin所發起,是一個開源的專案,基於微軟的 DLR引擎。
IronPython的主頁: IronPython.net /
github站點:
藉由IronPython,就可以利用.NET執行儲存在Python指令碼中的程式碼段。下面通過簡單的範例說明如何應用C#呼叫Python指令碼。
1、在VS中新建表單專案:IronPythonDemo
2、VS的選單中開啟“Nuget程式包管理器”
3、搜尋IronPython程式包並安裝
安裝後自動參照如下的DLL
4、在exe程式所在資料夾下建立Python指令碼。Python範例指令碼實現求兩個數的四則運算:
num1=arg1 num2=arg2 op=arg3 if op==1: result=num1+num2 elif op==2: result=num1-num2 elif op==3: result=num1*num2 else: result=num1*1.0/num2
設定IronPythonDemo.py檔案屬性為“複製到輸出目錄”
5、修改工程的組態檔App.config如下:
其中microsoft.scripting節點中設定了IronPython語言引擎的幾個屬性。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="microsoft.scripting" type="Microsoft.Scripting.Hosting.Configuration.Section, Microsoft.Scripting"/> </configSections> <microsoft.scripting> <languages> <language names="IronPython;Python;py" extensions=".py" displayName="Python" type="IronPython.Runtime.PythonContext, IronPython"/> </languages> </microsoft.scripting> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> </configuration>
6、 繪製表單如下:
7、編寫計算的函數:
ScriptRuntime scriptRuntime = ScriptRuntime.CreateFromConfiguration(); ScriptEngine pyEngine = scriptRuntime.GetEngine("python"); ScriptSource source = pyEngine.CreateScriptSourceFromFile("IronPythonDemo.py");//設定指令碼檔案 ScriptScope scope = pyEngine.CreateScope(); try { //設定引數 scope.SetVariable("arg1", Convert.ToInt32(txtNum1.Text)); scope.SetVariable("arg2", Convert.ToInt32(txtNum2.Text)); scope.SetVariable("arg3", operation.SelectedIndex + 1); } catch (Exception) { MessageBox.Show("輸入有誤。"); } source.Execute(scope); labelResult.Text = scope.GetVariable("result").ToString(); }
8、編譯執行可得計算結果(此處未做輸入的檢查)
IronPythonDemo2.py
def main(arr): try: arr = set(arr) arr = sorted(arr) arr = arr[0:] return str(arr) except Exception as err: return str(err)
c#程式碼
ScriptEngine pyEngine = IronPython.Hosting.Python.CreateEngine();//建立Python直譯器物件 dynamic py = pyEngine.ExecuteFile(@"IronPythonDemo2.py");//讀取指令碼檔案 int[] array = new int[9] { 9, 3, 5, 7, 2, 1, 3, 6, 8 }; string reStr = py.main(array);//呼叫指令碼檔案中對應的函數 MessageBox.Show(reStr); //或者 ScriptRuntime pyRuntime = IronPython.Hosting.Python.CreateRuntime(); //建立一下執行環境 dynamic obj = pyRuntime.UseFile("IronPythonDemo2.py"); //呼叫一個Python檔案 int[] array = new int[9] { 9, 3, 5, 7, 2, 1, 3, 6, 8 }; string reStr = obj.main(array);//呼叫指令碼檔案中對應的函數 MessageBox.Show(reStr);
C#程式碼
using System; using System.Collections; using System.Diagnostics; namespace Test { class Program { static void Main(string[] args) { Process p = new Process(); string path = "reset_ipc.py";//待處理python檔案的路徑,本例中放在debug資料夾下 string sArguments = path; ArrayList arrayList = new ArrayList(); arrayList.Add("com4"); arrayList.Add(57600); arrayList.Add("password"); foreach (var param in arrayList)//新增引數 { sArguments += " " + sigstr; } p.StartInfo.FileName = @"D:Python2python.exe"; //python2.7的安裝路徑 p.StartInfo.Arguments = sArguments;//python命令的引數 p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardError = true; p.StartInfo.CreateNoWindow = true; p.Start();//啟動程序 Console.WriteLine("執行完畢!"); Console.ReadKey(); } } }
python指令碼
# -*- coding: UTF-8 -*- import serial import time def resetIPC(com, baudrate, password, timeout=0.5): ser=serial.Serial(com, baudrate, timeout=timeout) flag=True try: ser.close() ser.open() ser.write("n".encode("utf-8")) time.sleep(1) ser.write("rootn".encode("utf-8")) time.sleep(1) passwordStr="%sn" % password ser.write(passwordStr.encode("utf-8")) time.sleep(1) ser.write("killall -9 xxxn".encode("utf-8")) time.sleep(1) ser.write("rm /etc/xxx/xxx_user.*n".encode("utf-8")) time.sleep(1) ser.write("rebootn".encode("utf-8")) time.sleep(1) except Exception: flag=False finally: ser.close() return flag resetIPC(sys.argv[1], sys.argv[2], sys.argv[3])
上面的python指令碼實現的是重啟IPC裝置,測試功能成功。
呼叫包含第三方模組的python指令碼時,嘗試過使用path.append()方式,偵錯有各種問題,最終放棄了,沒有研究。
到此這篇關於C#使用IronPython庫呼叫Python指令碼的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45