欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Python腳本和C#的互相調(diào)用

系統(tǒng) 1659 0

Python是一種解釋型、面向?qū)ο蟆討B(tài)數(shù)據(jù)類型的高級程序設(shè)計語言。是一門動態(tài)解釋型語言,也是一門膠水語言,很方面調(diào)用其它編程語言的程序。比如:C/C++,C#等等。這里介紹一下Python和C#的互相調(diào)用。

IronPython?是一種在 .NET 及 Mono上的 Python 實現(xiàn),由微軟的 Jim Hugunin 所發(fā)起,是一個開源的項目,基于微軟的 DLR 引擎。

IronPython是流行的程序設(shè)計語言Python通向.NET framework的一個端口。微軟公司對于.NET framework的IronPython和動態(tài)語言非常關(guān)注。微軟公司已經(jīng)在各種項目中提供了對IronPython的支持。

IronPython已經(jīng)很好的集成到了.NET framework中,Python語言中的字符串對應(yīng)于.NET的字符串對象,并且Python語言中對應(yīng)的方法,在IronPython中也都提供了。其它數(shù)據(jù)類型也是一樣。

IronPython-2.7.8經(jīng)過了一年的制作,終于發(fā)布了。這將是第一個支持 .NET Core 的版本。一些詳情的更新內(nèi)容,請點擊這里查看。

下載地址:

  • IronPython-2.7.8.msi

  • IronPython.2.7.8.zip

  • IronPython.StdLib.2.7.8.zip

  • Source code ?(zip)

  • Source code ?(tar.gz)

?

1.IronPython 調(diào)用 .NET 標準庫

在這里我們使用VS2019進行開發(fā),新建一個IronPython項目:

Python腳本和C#的互相調(diào)用_第1張圖片

?

如上圖創(chuàng)建一個IronPython 控制臺程序,命名為IronPythonTest 。在.NET中,有很多標準庫,在IronPython中,就可以使用import來引入這些標準庫來直接使用??匆粋€簡單的例子,我們使用.NET中的String和DateTime 。

Python腳本和C#的互相調(diào)用_第2張圖片

上面寫一個簡單的Python腳本,通過 IronPython2.7 .exe 解釋器執(zhí)行。如下圖:

Python腳本和C#的互相調(diào)用_第3張圖片

2.IronPython調(diào)用 .NET? 自定義庫(DLL)

在.NET開發(fā)中,會經(jīng)常通過References來引用一些.NET庫,當然在IronPython項目中,也可以引用并使用.NET庫。

例如,現(xiàn)在我們有一個Calc的計算類型,里面有一個Add和Sub方法。通過這個類型,生成了一個CalcLib.dll。R

            
              ?
namespace CalcLib
{
    public class Calc
    {
        public int Add(int a, int b)
        {
            return a + b;
        }

        public int Sub(int a, int b)
        {
            return a - b;
        }
    }
}

?
            
          

下面看看如何在IronPython項目中使用這個dll,在IronPython中,可以使用"clr"模塊來添加.NET引用,將CalLib.dll編譯好,放在IronPython 工程目錄和執(zhí)行腳本同一目錄下:

?

Python腳本和C#的互相調(diào)用_第4張圖片

python腳本如下:

            
              import clr
clr.AddReference('CalcLib')
#clr.AddReferenceToFile('CalcLib.dll')
from CalcLib import Calc
print dir(Calc)
calcObj = Calc()
print "result of 3+4 is:", calcObj.Add(3,4)
print "result of 10+2 is:", calcObj.Sub(10,2)

raw_input("press Enter to exit!")
            
          

IronPython解釋執(zhí)行:

Python腳本和C#的互相調(diào)用_第5張圖片

?

3.C#調(diào)用IronPython腳本

在.NET framework中,包含了IronPython的編譯器和執(zhí)行引擎,所以我們可以通過C#代碼創(chuàng)建一個引擎實例,然后執(zhí)行腳本。

先看看我們需要使用的類型:

  • ScriptEngine: 動態(tài)語言(IronPython)執(zhí)行類,可于解析和執(zhí)行動態(tài)語言代碼。
  • ScriptScope:構(gòu)建一個執(zhí)行上下文,其中保存了環(huán)境及全局變量;宿主(Host)可以通過創(chuàng)建不同的 ScriptScope 來提供多個數(shù)據(jù)隔離的執(zhí)行上下文。
  • ScriptSource:操控動態(tài)語言代碼的類型,可以編譯(Compile)、運行(Execute)代碼。

現(xiàn)在我們有一個簡單的打印當前時間的IronPython腳本:

            
              from System import DateTime, String 
formatStr = String.Format("{0} {1}", "Hello World! The current date and time is ", DateTime.Now) 
print formatStr  
#print dir(String)

raw_input("press Enter to exit!")
            
          

先進一個C#控制臺項目,引入IronPython庫:

            
              using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                ScriptEngine engine = Python.CreateEngine();
                ScriptScope scope = engine.CreateScope();

                ScriptSource script = engine.CreateScriptSourceFromFile(@"IronPythonTest.py");

                var result = script.Execute(scope);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }

        }
    }
}
            
          

將控制臺exe程序輸出到IronPython腳本同一目錄:

Python腳本和C#的互相調(diào)用_第6張圖片

點擊運行,從C#程序調(diào)用了IronPython腳本(這里Exe必須和IronPython在同一目錄下,才可以成功調(diào)用)

Python腳本和C#的互相調(diào)用_第7張圖片

4.從C#給IronPython傳遞參數(shù)

在ScriptScope類型中,有一個SetVariable方法,我們可以通過這個方法給腳本傳遞參數(shù)。

public void SetVariable(string name, object value)

這樣,我們就可以把一個C#實例傳遞給IronPython,然后腳本就可以使用C#實例的成員??匆粋€例子:

            
              using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace Test
{
    public class Student
    {
        public int Age { get; set; }
        public string Name { get; set; }
        public override string ToString()
        {
            return string.Format("{0} is {1} years old", this.Name, this.Age);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                ScriptEngine engine = Python.CreateEngine();
                ScriptScope scope = engine.CreateScope();
                Student stu = new Student { Name = "deokoo", Age = 28 };
                scope.SetVariable("stuObj",stu);
                ScriptSource script = engine.CreateScriptSourceFromFile(@"IronPythonTest.py");

                var result = script.Execute(scope);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }

        }
    }

    

}

            
          

在這個例子中,C#代碼中創(chuàng)建了一個Student類型的實例,并把這個實例傳遞給了PrintStuInfo.py腳本:

            
              from System import DateTime, String 
formatStr = String.Format("{0} {1}", "Hello World! The current date and time is ", DateTime.Now) 
print formatStr  
#print dir(String)
print "Student name:", stuObj.Name
print "Student age:", stuObj.Age
print stuObj.ToString()
raw_input("press Enter to exit!")
            
          

通過輸出可以看到,IronPython腳本可以方便的訪問C#實例的成員:

Python腳本和C#的互相調(diào)用_第8張圖片

總結(jié)

本篇文章通過一些例子演示了IronPython與C#的交互,感覺有幾個例子還是很有意思的。

有時候使用C#調(diào)用IronPython可以使程序變得更加靈活,通過一個C#類型提供一組封裝好的操作,每次構(gòu)建類型實例然后傳遞給腳本;這樣,用戶就可以編寫IronPython腳本,然后使用C#類型中提供的操作方法,從而實現(xiàn)不同的自定義操作。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久国产亚洲观看 | 免费国产黄频在线观看视频 | 国产精品国产a级 | 免费一级毛片在线播放视频 | 国产毛片欧美毛片久久久 | 成人国产精品视频 | 久久久综合视频 | 亚洲欧洲一区二区三区 | 国产成人综合在线 | 男女性刺激爽爽免费视频 | 国产福利91精品一区二区三区 | 9久热这里只有精品视频在线观看 | 国产精品成人va在线观看入口 | 中文字幕在线免费观看 | 欧美视频精品 | 奇米第四狠狠777高清秒播 | 精品一区亚洲 | 五月婷婷丁香六月 | 91视频免费观看 | 成人免费观看在线网址 | 欧美日韩在线一区二区 | 午夜免费视频 | 啊啊啊好紧好爽 | 国产成人91| 亚洲成人精品久久久 | 亚洲精品一区二区三区在线观看 | 亚洲欧美日韩高清 | 狠狠干网 | 91短视频版在线观看www免费 | 亚洲精品a级 | 欧美在线观看视频一区 | 啪啪免费网站入口链接 | 亚洲国产精品日韩高清秒播 | 中国免费毛片 | 亚洲欧美在线视频免费 | 老头巨大校花体内驰骋小说文 | 国产精品尤物 | 国产精品第一国产精品 | 精品一区二区三区自拍图片区 | 国内精品免费 | 一级黄色片在线 |