C#調(diào)用python腳本的方法步驟(2種)
因項目需要,需要使用C#控制臺程序執(zhí)行python腳本,查詢各種資料后可以成功調(diào)用了,記錄一下,以備后面遺忘。
只嘗試了兩種調(diào)用方式,第一種只適用于python腳本中不包含第三方模塊的情況,第二種針對的是python腳本中包含第三方模塊的情況。不管哪種方式,首先都需要安裝IronPython。我是通過vs2017的工具->NuGet包管理器->管理解決方案的NuGet包,搜索IronPython包安裝,也可以在官網(wǎng)下載安裝包自行安裝后添加引用即可。
方式一:適用于python腳本中不包含第三方模塊的情況
C#代碼
using IronPython.Hosting; using Microsoft.Scripting.Hosting; using System; namespace CSharpCallPython { class Program { static void Main(string[] args) { ScriptEngine pyEngine = Python.CreateEngine();//創(chuàng)建Python解釋器對象 dynamic py = pyEngine.ExecuteFile(@"test.py");//讀取腳本文件 int[] array = new int[9] { 9, 3, 5, 7, 2, 1, 3, 6, 8 }; string reStr = py.main(array);//調(diào)用腳本文件中對應的函數(shù) Console.WriteLine(reStr); Console.ReadKey(); } } }
python腳本
def main(arr): try: arr = set(arr) arr = sorted(arr) arr = arr[0:] return str(arr) except Exception as err: return str(err)
結(jié)果
方式二:適用于python腳本中包含第三方模塊的情況
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)//添加參數(shù) { sArguments += " " + sigstr; } p.StartInfo.FileName = @"D:\Python2\python.exe"; //python2.7的安裝路徑 p.StartInfo.Arguments = sArguments;//python命令的參數(shù) p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardError = true; p.StartInfo.CreateNoWindow = true; p.Start();//啟動進程 Console.WriteLine("執(zhí)行完畢!"); 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("root\n".encode("utf-8")) time.sleep(1) passwordStr="%s\n" % password ser.write(passwordStr.encode("utf-8")) time.sleep(1) ser.write("killall -9 xxx\n".encode("utf-8")) time.sleep(1) ser.write("rm /etc/xxx/xxx_user.*\n".encode("utf-8")) time.sleep(1) ser.write("reboot\n".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腳本實現(xiàn)的是重啟IPC設備,測試功能成功。
調(diào)用包含第三方模塊的python腳本時,嘗試過使用path.append()方式,調(diào)試有各種問題,最終放棄了,沒有研究。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持我們。
欄 目:C#教程
下一篇:C#中的局部變量沖突問題
本文標題:C#調(diào)用python腳本的方法步驟(2種)
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/4580.html
您可能感興趣的文章
- 01-10C#調(diào)用dos窗口獲取相關信息的方法
- 01-10同步調(diào)用和異步調(diào)用WebService
- 01-10C#調(diào)用WebService實例開發(fā)
- 01-10C++調(diào)用C#的DLL程序?qū)崿F(xiàn)方法
- 01-10C#創(chuàng)建數(shù)據(jù)庫及導入sql腳本的方法
- 01-10C# 調(diào)用 JavaWebservice服務遇到的問題匯總
- 01-10Python設計模式編程中的備忘錄模式與對象池模式示例
- 01-10基于C#實現(xiàn)手機號碼歸屬地接口調(diào)用
- 01-10C#使用Process類調(diào)用外部exe程序
- 01-10Windows下C#的GUI窗口程序中實現(xiàn)調(diào)用Google Map的實例


閱讀排行
本欄相關
- 01-10C#通過反射獲取當前工程中所有窗體并
- 01-10關于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實現(xiàn)txt定位指定行完整實例
- 01-10WinForm實現(xiàn)仿視頻 器左下角滾動新
- 01-10C#停止線程的方法
- 01-10C#實現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實現(xiàn)讀取注冊表監(jiān)控當前操作系統(tǒng)已
隨機閱讀
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10SublimeText編譯C開發(fā)環(huán)境設置
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 04-02jquery與jsp,用jquery
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10C#中split用法實例總結(jié)
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10delphi制作wav文件的方法