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

Python腳本和C#的互相調用

系統 1887 0

Python是一種解釋型、面向對象、動態數據類型的高級程序設計語言。是一門動態解釋型語言,也是一門膠水語言,很方面調用其它編程語言的程序。比如:C/C++,C#等等。這里介紹一下Python和C#的互相調用。

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

IronPython是流行的程序設計語言Python通向.NET framework的一個端口。微軟公司對于.NET framework的IronPython和動態語言非常關注。微軟公司已經在各種項目中提供了對IronPython的支持。

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

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

下載地址:

  • 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 調用 .NET 標準庫

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

Python腳本和C#的互相調用_第1張圖片

?

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

Python腳本和C#的互相調用_第2張圖片

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

Python腳本和C#的互相調用_第3張圖片

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

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

例如,現在我們有一個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 工程目錄和執行腳本同一目錄下:

?

Python腳本和C#的互相調用_第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解釋執行:

Python腳本和C#的互相調用_第5張圖片

?

3.C#調用IronPython腳本

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

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

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

現在我們有一個簡單的打印當前時間的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#的互相調用_第6張圖片

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

Python腳本和C#的互相調用_第7張圖片

4.從C#給IronPython傳遞參數

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

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#代碼中創建了一個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#的互相調用_第8張圖片

總結

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

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久99国产综合精品 | 国产免费一区二区在线看 | 国产在线视频一区二区 | 国产亚洲欧美一区 | 草莓视频午夜在线观影 | 色秀视频在线观看全部 | 欧美图片激情小说 | 天天拍夜夜操 | 亚洲免费视频大全 | 国产se | 妞干网av | 在线观看av网站永久 | 国产在线视频网 | 蜜桃官网 | 国产精品永久免费 | www.ouchn.com| 黄色草逼视频 | 欧美精品一区二区在线观看 | 国产日韩一区在线精品欧美玲 | 丝袜美腿一区二区三区动态图 | 小明永久2015www永久免费观看 | 小明永久免费视频 | 国产成人18黄网站免费网站 | 日本黄色网战 | 久久综合狠狠色综合伊人 | 国产三级做爰在线观看∵ | 国产精品免费播放 | 日韩国产一区二区三区 | 国产精品美女久久久久久久久久久 | 一区二区日韩 | 在线高清免费观看视频 | 国产一区二区三区乱码 | 国产精品自拍99 | 亚洲午夜精品aaa级久久久久 | 亚洲欧美中文字幕 | 亚洲欧美国产精品久久 | 青草草在线视频 | 香港三级日本三级韩国三级韩 | 草草免费 | 欧美视频观看 | 三级欧美日韩 |