最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#調(diào)用Python腳本程序的兩種方法

 更新時(shí)間:2024年02月19日 10:34:51   作者:老狼IT工作室  
本文主要介紹了C#調(diào)用Python腳本程序的兩種方法,包含介紹了通過(guò)C#IronPython開源庫(kù)和通過(guò)Process類來(lái)運(yùn)行python解釋器這兩種,具有一定的參考價(jià)值,感興趣的可以了解一下

為什么需要C#調(diào)用python?

有以下幾個(gè)原因需要C#調(diào)用Python:

  • Python擁有豐富的生態(tài)系統(tǒng):Python有很多強(qiáng)大的第三方庫(kù)和工具,可以用于數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)、自然語(yǔ)言處理等領(lǐng)域。通過(guò)C#調(diào)用Python,可以利用Python的生態(tài)系統(tǒng)來(lái)完成一些特定的任務(wù)。

  • C#和Python的優(yōu)勢(shì)互補(bǔ):C#是一種高性能、靜態(tài)類型的編程語(yǔ)言,適合用于開發(fā)大型應(yīng)用程序和高性能的系統(tǒng)。而Python則是一種動(dòng)態(tài)類型的腳本語(yǔ)言,適合用于快速開發(fā)原型和處理復(fù)雜的數(shù)據(jù)分析任務(wù)。通過(guò)C#調(diào)用Python,可以充分發(fā)揮兩者的優(yōu)勢(shì)。

  • C#和Python在不同領(lǐng)域的應(yīng)用:C#主要應(yīng)用于Windows平臺(tái)的開發(fā),而Python則可以用于各種平臺(tái),包括Windows、Linux和Mac OS。通過(guò)C#調(diào)用Python,可以在C#應(yīng)用程序中使用Python的功能和特性,實(shí)現(xiàn)更廣泛的應(yīng)用場(chǎng)景。

如何實(shí)現(xiàn)C#調(diào)用python腳本程序?

方式一:通過(guò)C#IronPython開源庫(kù)

IronPython是一個(gè)基于.NET平臺(tái)的Python解釋器。它是使用C#編寫的,可以被集成到.NET應(yīng)用程序中,并且可以直接調(diào)用和使用.NET庫(kù)和組件。IronPython提供了一個(gè)Python語(yǔ)言的實(shí)現(xiàn),同時(shí)具備了與.NET平臺(tái)無(wú)縫集成的能力。

IronPython最初由微軟開發(fā)并發(fā)布,旨在提供一個(gè)Python解釋器,使Python開發(fā)人員能夠利用.NET框架的優(yōu)勢(shì)。IronPython是完全兼容Python 2.7語(yǔ)法和語(yǔ)義的,并且還支持一些Python 3的一些特性。IronPython可以通過(guò).NET編譯器將Python代碼轉(zhuǎn)換為托管代碼,并與.NET框架進(jìn)行交互。

IronPython具有以下特點(diǎn)和優(yōu)勢(shì):

  • 與.NET框架的深度集成:IronPython可以直接與.NET庫(kù)和組件進(jìn)行交互,可以輕松使用和調(diào)用.NET的功能和類庫(kù)。
  • 動(dòng)態(tài)語(yǔ)言的靈活性:作為一種動(dòng)態(tài)類型的腳本語(yǔ)言,IronPython具有動(dòng)態(tài)性和靈活性,可以進(jìn)行快速的原型開發(fā)和動(dòng)態(tài)腳本編寫。
  • 跨平臺(tái)支持:IronPython可以在Windows、Linux和Mac OS等多個(gè)平臺(tái)上運(yùn)行,并且可以與不同平臺(tái)的.NET應(yīng)用程序集成。
  • 社區(qū)支持和活躍度:IronPython擁有活躍的開源社區(qū),有大量的開發(fā)者和用戶為其貢獻(xiàn)代碼和提供支持。

總之,IronPython是一個(gè)具有.NET集成和跨平臺(tái)支持的Python解釋器,可以在.NET平臺(tái)開發(fā)中使用Python語(yǔ)言和功能。

IronPython.net /

缺點(diǎn):

1)只支持到python 3.4的相關(guān)特性, 和目前主流的python 3.9, 3.10,3.11等版本相差甚遠(yuǎn),會(huì)導(dǎo)致很多python流行的開源庫(kù)(比如scikit-learn),無(wú)法正常使用。

IronPython使用案例

NuGet安裝IronPython

test.py

def sayHi():
    print("hello you")
    
def add(x,y):
    try:
        print(f"add {x}, {y}")
        return x + y
    except Exception as err:
        return str(err)
        
def sum(arr):
    try:
        print(f"sum {arr}")
        sum = 0
        for i in arr:
            sum += i
        return sum
    except Exception as err:
        return str(err)

PythonScriptWindow.axml

<Window x:Class="CallPythonDemos.PythonScriptWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:CallPythonDemos"
        mc:Ignorable="d"
        Title="Python Script調(diào)用" Height="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Button x:Name="btnCallPythonScript" Content="調(diào)用python腳本" Grid.Row="0" Margin="5" Click="btnCallPythonScript_Click"/>
        <Button x:Name="btnClearOutput" Content="清理輸出" Grid.Row="0" Grid.Column="1" Margin="5" Click="btnClearOutput_Click"/>
        <TextBlock Text="輸入?yún)?shù):" Grid.Row="1" Margin="5"/>
        <TextBlock Text="輸出結(jié)果:" Grid.Row="1" Grid.Column="1" Margin="5"/>
        <TextBox x:Name="txtInputParam" Grid.Row="2" Margin="5"/>
        <RichTextBox x:Name="txtOutputResult" Grid.Row="2" Grid.Column="1" Margin="5" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" IsReadOnly="True">
            <RichTextBox.Document>
                <FlowDocument/>
            </RichTextBox.Document>
        </RichTextBox>
    </Grid>
</Window>

PythonScriptWindow.axml.cs

using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
using System.Diagnostics;
using System.Windows;
using System.Windows.Documents;
using System.Windows.Media;

namespace CallPythonDemos
{
    /// <summary>
    /// PythonScriptWindow.xaml 的交互邏輯
    /// </summary>
    public partial class PythonScriptWindow : Window
    {
        public PythonScriptWindow()
        {
            InitializeComponent();
        }

        private void btnCallPythonScript_Click(object sender, RoutedEventArgs e)
        {
            _RunTestByIronPython();
        }

        private void btnClearOutput_Click(object sender, RoutedEventArgs e)
        {
            txtOutputResult.Document.Blocks.Clear();
        }

        private void _RunTestByIronPython()
        {
            ScriptEngine pyEngine = Python.CreateEngine();
            dynamic testpy = pyEngine.ExecuteFile("test.py");
            testpy.sayHi();

            var add = testpy.add(3, 5);
            _WriteLog($"add 方法的和是:{add}");

            int[] arr = new int[3] { 2, 4, 6 };
            var sum = testpy.sum(arr);
            _WriteLog($"數(shù)組的和是:{sum}");
        }

        private void _WriteLog(string? log)
        {
            Paragraph para = new Paragraph() { Margin = new Thickness(0) };
            para.Inlines.Add(new Run(log) { Foreground = Brushes.Black });
            txtOutputResult.Document.Blocks.Add(para);
        }
    }
}

運(yùn)行效果

方式二: 通過(guò)Process類來(lái)運(yùn)行python解釋器

優(yōu)缺點(diǎn)

優(yōu)點(diǎn):可以使用python當(dāng)前的主流版本,并且可以使用大部分的流行的開源庫(kù)。

缺點(diǎn):只能通過(guò)命令行參數(shù)和控制臺(tái)輸出與python進(jìn)行通信。

安裝scikit-learn

pip install scikit-learn

gen_model.py

from sklearn import linear_model
if __name__ == '__main__':
    reg = linear_model.LinearRegression()
    reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2])
    print('coef_:', reg.coef_)
    print('intercept_:', reg.intercept_)
    print('done')

PythonScriptWindow.axml.cs

using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
using System.Diagnostics;
using System.Windows;
using System.Windows.Documents;
using System.Windows.Media;

namespace CallPythonDemos
{
    /// <summary>
    /// PythonScriptWindow.xaml 的交互邏輯
    /// </summary>
    public partial class PythonScriptWindow : Window
    {
        public PythonScriptWindow()
        {
            InitializeComponent();
        }

        private void btnCallPythonScript_Click(object sender, RoutedEventArgs e)
        {
            //_RunTestByIronPython();
            _RunPythonScript();
        }

        private void btnClearOutput_Click(object sender, RoutedEventArgs e)
        {
            txtOutputResult.Document.Blocks.Clear();
        }

        private void _RunTestByIronPython()
        {
            ScriptEngine pyEngine = Python.CreateEngine();
            dynamic testpy = pyEngine.ExecuteFile("test.py");
            testpy.sayHi();

            var add = testpy.add(3, 5);
            _WriteLog($"add 方法的和是:{add}");

            int[] arr = new int[3] { 2, 4, 6 };
            var sum = testpy.sum(arr);
            _WriteLog($"數(shù)組的和是:{sum}");
        }
        /// <summary>
        ///  調(diào)用python腳本
        /// </summary>

        private void _RunPythonScript()
        {
            Process p = new Process();
            p.StartInfo.FileName = "D:/my_project/Anaconda3/envs/jupyterlab_py310/python.exe";
            p.StartInfo.Arguments = "D:/my_project/first_board_debug/gen_model.py";
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.CreateNoWindow = true;
            _WriteLog($"執(zhí)行python腳本開始------------");
            p.Start();
            /*string output = p.StandardOutput.ReadToEnd(); //讀取控制臺(tái)的輸出信息
            p.WaitForExit();  // 等待外部程序進(jìn)行完畢
            _WriteLog(output);
            _WriteLog($"執(zhí)行python腳本結(jié)束------------ exit code: {p.ExitCode}");*/
            // 如果使用異步讀取輸出流,python程序不會(huì)自動(dòng)退出,調(diào)用WaitForExit會(huì)阻塞,
            // 必須自己根據(jù)返回來(lái)的字符串來(lái)決定程序是否已經(jīng)執(zhí)行完成
            p.BeginOutputReadLine();
            p.OutputDataReceived += new DataReceivedEventHandler(outputDataReceived);
        }

        /// <summary>
        /// 輸出執(zhí)行python腳本的控制臺(tái)信息
        /// </summary>
        private void outputDataReceived(object sender, DataReceivedEventArgs e)
        {
            if (!string.IsNullOrEmpty(e.Data))
            {
                _WriteLog(e.Data);
                if (e.Data == "done")
                {
                    var p = sender as Process;
                    if(p!=null)
                    {
                        _WriteLog($"執(zhí)行python腳本結(jié)束");
                        p.Close();
                    }
                }
            }
        }

        private void _WriteLog(string? log)
        {
            this.Dispatcher.Invoke(() => {
                Paragraph para = new Paragraph() { Margin = new Thickness(0) };
                para.Inlines.Add(new Run(log) { Foreground = Brushes.Black });
                txtOutputResult.Document.Blocks.Add(para);
            });
        }
    }
}

運(yùn)行效果

到此這篇關(guān)于C#調(diào)用Python腳本程序的兩種方法的文章就介紹到這了,更多相關(guān)C#調(diào)用Python腳本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#控制圖像旋轉(zhuǎn)和翻轉(zhuǎn)的方法

    C#控制圖像旋轉(zhuǎn)和翻轉(zhuǎn)的方法

    這篇文章主要介紹了C#控制圖像旋轉(zhuǎn)和翻轉(zhuǎn)的方法,涉及C#圖像操作中RotateFlip方法的相關(guān)使用技巧,需要的朋友可以參考下
    2015-06-06
  • C#實(shí)現(xiàn)給PDF文檔設(shè)置過(guò)期時(shí)間

    C#實(shí)現(xiàn)給PDF文檔設(shè)置過(guò)期時(shí)間

    我們可以給一些重要文檔或者臨時(shí)文件設(shè)置過(guò)期時(shí)間和過(guò)期信息提示來(lái)提醒讀者或管理者文檔的時(shí)效性,并及時(shí)對(duì)文檔進(jìn)行調(diào)整、更新等。下面本文將介紹如何通過(guò)C#來(lái)給PDF文檔設(shè)置過(guò)期時(shí)間的方法。需要的可以參考一下
    2022-01-01
  • C#中的高效IO庫(kù)System.IO.Pipelines

    C#中的高效IO庫(kù)System.IO.Pipelines

    這篇文章介紹了C#中的高效IO庫(kù)System.IO.Pipelines,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • C#的XML兩種代碼注釋實(shí)例說(shuō)明

    C#的XML兩種代碼注釋實(shí)例說(shuō)明

    在C/C++,JAVA中,有兩種注釋,一種是單行注釋,即兩根反斜杠(//),另一種是多行注釋,即以/*開頭,以*/結(jié)尾,本文將詳細(xì)介紹,需要的朋友可以參考下
    2012-12-12
  • C# List.Sort四種重載總結(jié)

    C# List.Sort四種重載總結(jié)

    本文詳細(xì)分析了C#中List.Sort()方法的四種重載形式及其實(shí)現(xiàn)原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-12-12
  • C#監(jiān)控文件夾變化的方法

    C#監(jiān)控文件夾變化的方法

    這篇文章主要介紹了C#監(jiān)控文件夾變化的方法,通過(guò)FileSystemWatcher類的方法來(lái)實(shí)現(xiàn)對(duì)文件夾的監(jiān)控,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-11-11
  • C#程序最小化到托盤圖標(biāo)操作步驟與實(shí)現(xiàn)代碼

    C#程序最小化到托盤圖標(biāo)操作步驟與實(shí)現(xiàn)代碼

    設(shè)置窗體屬性showinTask=false;加notifyicon控件notifyIcon1,為控件notifyIcon1的屬性Icon添加一個(gè)icon圖標(biāo);添加窗體最小化事件(首先需要添加事件引用)接下來(lái)介紹實(shí)現(xiàn)代碼,感興趣的朋友可以研究下
    2012-12-12
  • c# 應(yīng)用NPOI獲取Excel中的圖片,保存至本地的算法

    c# 應(yīng)用NPOI獲取Excel中的圖片,保存至本地的算法

    本文主要介紹了c# 應(yīng)用NPOI獲取Excel中的圖片,保存至本地的算法。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • C#生成隨機(jī)數(shù)的方法小結(jié)

    C#生成隨機(jī)數(shù)的方法小結(jié)

    這篇文章主要介紹了C#生成隨機(jī)數(shù)的方法,實(shí)例總結(jié)了C#生成隨機(jī)數(shù)的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-05-05

最新評(píng)論

壶关县| 商水县| 绥德县| 澄迈县| 池州市| 宁远县| 盐亭县| 台中县| 临汾市| 阿城市| 宿州市| 铜陵市| 扎鲁特旗| 伊宁市| 区。| 大同县| 察雅县| 安仁县| 乳山市| 五家渠市| 西青区| 利川市| 嵊州市| 越西县| 凤山市| 黄骅市| 平昌县| 馆陶县| 黔南| 巴东县| 宜君县| 吴江市| 商水县| 红安县| 九龙坡区| 阿拉善右旗| 濮阳县| 宿州市| 洞头县| 九江县| 敦化市|