欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#使用IronPython調(diào)用python代碼的實現(xiàn)示例

 更新時間:2025年01月08日 11:43:06   作者:淀粉腸狂熱粉  
本文主要介紹了在C#中使用IronPython調(diào)用Python代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

找不到os:已解決

os是python基礎(chǔ)包,這個都找不到實在很離譜。解法是在paths中增加os的路徑。
首先在anaconda prompt中找到位置:

Python 3.9.13 (main, Aug 25 2022, 23:51:50) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
...
>>> import os
>>> os
<module 'os' from 'D:\\ProgramData\\Anaconda3\\lib\\os.py'>
>>>

所以修改C#中調(diào)用部分:

...
var paths = engine.GetSearchPaths();
paths.Add("C:\\Users\\xxxx\\.nuget\\packages\\ironpython\\3.4.1\\lib");
paths.Add("D:\\ProgramData\\Anaconda3\\lib"); // 這一句
engine.SetSearchPaths(paths);
...

此時報錯消失。

invalid syntax:版本問題,未解決

C#中完整報錯:

引發(fā)的異常:“Microsoft.Scripting.SyntaxErrorException”(位于 Microsoft.Dynamic.dll 中)
“Microsoft.Scripting.SyntaxErrorException”類型的未經(jīng)處理的異常在 Microsoft.Dynamic.dll 中發(fā)生 
invalid syntax

參考這里:
Invalid syntax · Issue #1501 · IronLanguages/ironpython3 · GitHub
https://github.com/IronLanguages/ironpython3/issues/1501

我這里的問題就是python的版本,本地是3.9但是IronPython裝的是3.4。這個暫時沒法解決,所以我還是放棄在python中執(zhí)行了。

2021/8/27更新:c#執(zhí)行python的exe文件

這個的主要問題是慢。我的項目只用到matplotlib和biopython,所以通過創(chuàng)建虛擬環(huán)境,裝包,然后用pyinstaller打包的方式構(gòu)建可執(zhí)行文件。簡單測了一下,文件讀取然后繪制4w+點就花了10s多。。實在不能忍。所以c#調(diào)用exe還是放棄吧。

DateTime beforeDT = System.DateTime.Now;
string pyexePath = @"C:\XXXXXX\dist\drawGraph.exe";
Process p = new Process();
p.StartInfo.FileName = pyexePath;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.CreateNoWindow = true;
// 我的一個參數(shù)
p.StartInfo.Arguments = @"C:\XXXX\XXX.txt";
p.Start();
string output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
Console.WriteLine(output);
DateTime afterDT = System.DateTime.Now;
TimeSpan ts = afterDT.Subtract(beforeDT);
Console.WriteLine("Time: {0}s", ts.TotalSeconds); 
p.Close();

C#調(diào)用python代碼和庫的幾種方法

  • 使用IronPython,直接調(diào)用python文件
    IronPython調(diào)用第三方庫需要裝庫、設(shè)路徑,可能報bug

  • 使用c++調(diào)用python,做成dll,在c#中調(diào)用dll
    需要用戶安裝python環(huán)境,慢

  • c#命令行調(diào)用py文件
    需要用戶安裝python環(huán)境

  • c#命令行調(diào)用python的exe文件

先說結(jié)論

IronPython是一個幫助c#引用python代碼的插件/庫。但是,由于我的python代碼中用到matplotlib和biopython,而這兩個包都需要numpy,可是IronPython完全不支持numpy,所以我最終放棄了這個做法。因此本文只貼最最最簡單的例子。

在這里插入圖片描述

環(huán)境

win10 + vs 2019 + netframework 4.7.2

實例

首先在工具-NuGet包管理器中搜索IronPython,安裝。我裝的版本是 2.7.11。

這里我第一次傻 了,因為IronPython 2.7.*就是python 2.7,IronPython 3.4才是python 3的。

然后在wpf項目里放一個mywindow.py文件,內(nèi)容為:

# -*- coding: utf-8 -*-
import sys

def text():
	return str(sys.path)

調(diào)用的地方這樣寫:

using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
public partial class WavePainter : Window
{
    public WavePainter()
    {
        InitializeComponent();
        //Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory);
        string basePath = AppDomain.CurrentDomain.BaseDirectory;
        string pyFilePath = basePath + @"..\..\py\mywindow.py";
        ScriptRuntime pyRuntime = Python.CreateRuntime();
        // 這里開始到dynamic py...行前都不是必須的。是指定lib path位置的
        var engine = pyRuntime.GetEngine("python");
        var pyScope = engine.CreateScope();
        var paths = engine.GetSearchPaths();
        paths.Add(basePath + @"..\..\packages\IronPython.2.7.11\lib");
        engine.SetSearchPaths(paths);
        // 執(zhí)行py文件
        dynamic py = pyRuntime.UseFile(pyFilePath);
        string a = py.text();
        tb1.Text = a;
    }
}

可以看到sys.path是真的加入內(nèi)容了。

在這里插入圖片描述

當前,只做簡單運算、不引用其他包的py代碼是可以跑起來的,但是如果引用諸如os這種基礎(chǔ)包都會報錯,提示模塊不存在。那么,如果實在要用,應該裝對應的Python環(huán)境,然后把對應路徑加到sys.path中來,那就是能跑的。

但是前面也說了,numpy用不了,而我的客戶都沒有python環(huán)境,我也不能強迫他們裝,所以只能采取別的方式了,下次再更新解決方案。

到此這篇關(guān)于C#使用IronPython調(diào)用python代碼的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)C# IronPython調(diào)用python內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#窗體布局方式詳解

    C#窗體布局方式詳解

    這篇文章主要介紹了C#窗體布局方式詳解的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • C#實現(xiàn)EPL?II格式打印與打印測試

    C#實現(xiàn)EPL?II格式打印與打印測試

    這篇文章介紹了C#實現(xiàn)EPL?II格式打印與打印測試的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C#實現(xiàn)UDP通信方式

    C#實現(xiàn)UDP通信方式

    文章介紹了如何使用C#實現(xiàn)UDP通信,包括UDP服務(wù)器和客戶端的實現(xiàn)步驟和示例代碼,服務(wù)器關(guān)鍵類為UdpClient和IPEndPoint,實例化對象后可以通過異步任務(wù)發(fā)送數(shù)據(jù)并接收數(shù)據(jù),客戶端同樣使用UdpClient和IPEndPoint,連接到遠程服務(wù)器后開新任務(wù)接收數(shù)據(jù)
    2025-01-01
  • C#?System.Linq提供類似SQL語法的高效查詢操作

    C#?System.Linq提供類似SQL語法的高效查詢操作

    System.Linq是C#的一個命名空間,提供了LINQ(語言集成查詢)功能,允許開發(fā)者使用一致的查詢語法來處理不同類型的數(shù)據(jù)源,如數(shù)組、集合、數(shù)據(jù)庫和XML等,本文介紹C#?System.Linq提供類似SQL語法的高效查詢操作,感興趣的朋友一起看看吧
    2024-09-09
  • C#使用windows服務(wù)發(fā)送郵件

    C#使用windows服務(wù)發(fā)送郵件

    這篇文章主要為大家詳細介紹了C#使用windows服務(wù)發(fā)送郵件的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • C# 的關(guān)鍵字詳細介紹

    C# 的關(guān)鍵字詳細介紹

    本文將詳細介紹C#關(guān)鍵字的應用,可供有需要的朋友參考
    2012-11-11
  • C#調(diào)用執(zhí)行外部程序的實現(xiàn)方法

    C#調(diào)用執(zhí)行外部程序的實現(xiàn)方法

    這篇文章主要介紹了C#調(diào)用執(zhí)行外部程序的實現(xiàn)方法,涉及C#進程調(diào)用的相關(guān)使用技巧,非常簡單實用,需要的朋友可以參考下
    2015-04-04
  • C# Main方法的傳入?yún)?shù)研究

    C# Main方法的傳入?yún)?shù)研究

    這篇文章主要介紹了C# Main方法的傳入?yún)?shù)研究,相信大家不管是在java中還是C#中都經(jīng)常見到public static void Main(string[] args)類似的語句,那這個args到底有什么用,你又知道多少呢?本文就專門研究了這個參數(shù),相信可以讓漲姿勢,需要的朋友可以參考下
    2015-06-06
  • C#影院售票系統(tǒng)畢業(yè)設(shè)計(1)

    C#影院售票系統(tǒng)畢業(yè)設(shè)計(1)

    這篇文章主要介紹了C#影院售票系統(tǒng)畢業(yè)設(shè)計,獻上了9個類的設(shè)計,需要的朋友可以參考下
    2015-11-11
  • 從C#程序中調(diào)用非受管DLLs的方法

    從C#程序中調(diào)用非受管DLLs的方法

    這篇文章主要介紹了從C#程序中調(diào)用非受管DLLs的方法,是非常實用的技巧,有助于深入理解Windows程序設(shè)計,需要的朋友可以參考下
    2014-10-10

最新評論