初步了解IronPython


裝了Ironpython還需要裝Python嗎?

----IronPython 是一種在 NET 和 Mono 上實現的 Python 語言,由 Jim Hugunin(同時也是 Jython 創造者)所創造.
IronPython是優雅的python編程語言和強大的.NET平台的有機結合。使用動態類型系統得以將Python移植到NET Framework上。
可以形象的說,Ironpython就像是Python的一種方言,所以裝了Ironpython就已經是安裝了Python了。

----Ironpython就是在Python.NET下的實現,CPython是C下的Python實現,都是同一個東東,所以裝了Ironpython並不需要裝Python,當然兩者也可以共存。

----不需要,Ironpython就是.NET下實現的Python

 

使用IronPython集成Python和.NET   http://python.jobbole.com/80982/

從兩個優秀的世界各取所需,更高效的復用代碼。想想就醉了,.NET和python融合了。“懶惰”的程序員們,還等什么?

Jesse Smith為您展示如何兩個語言來服務同一個.NET程序。你能集兩家所長:Python和.NET一起工作,提供可重用的代碼功能而不需要你為了一個環境重寫代碼庫。

通過使用IronPython 運行時庫,你可以讓Python腳本運行在你的.NET程序中。本文向你展示如何使用一個.NET程序中的python腳本獲取並展示用戶反饋。

如果你曾經有在一個.NET程序中運行Python腳本的需求,整合兩者最好的辦法是使用IronPython。我有過這樣的需求。我曾經效力的一個組織需要擴展一個已經存在於一個.NET地圖程序中的工具集。我們的目的是利用另一個工具集中現有的Python代碼來擴展這個已有的工具集,前者還不是后者的一部分。在做了一番研究之后,我決定使用IronPython,事情進展很順利。

本文基於上述項目的經驗,我會還原當時的場景,對你所處的情境也同樣適用。

對於這個我們所期望的解決方案,首先要面對的挑戰是從將要運行在.NET程序中的那個Python腳本獲取輸出,然后使用一個.NET程序的對話框把這個輸出展示給用戶。讓我感到吃驚的是,這么做比預想的還要簡單,你同樣也能學到如何去做同樣的事情。整個過程相對比較簡單,我們將在下面的章節中進行概述。

在.NET程序中嵌入Python腳本

在這個例子中,我向你展示如何在一個Windows桌面程序中嵌入Python腳本。目的是在一個已有的程序中添加一個新的工具按鈕。點擊按鈕后,程序會彈出一個對話框,顯示一個嵌入在對話框代碼中的Python腳本的運行結果。

為了給這個例子鋪墊更多的前因后果,我們這個應用程序是一個桌面地圖軟件,可以讓用戶創建他們自己的地圖。這個新的工具允許用戶解析和標准化他們地圖上的地址點。

標准化一個地址,就意味着要確保這個地址有一個街道名,前綴或后綴,房屋或建築編號,以及連接該街道的上一條街道和下一條街道。每一個地址段必須遵循US郵局郵編地址標准指導。

假設已有一個Python腳本已經可以做到這些;它就是例子中執行解析的腳本。Python腳本將會通過當前對話框在屏幕上輸出或閃現這個正在解析的地址,我們可以通過選擇地址解析工具來觸發對話框(我不想說的太細,僅僅解釋到這里。)

代碼並不重要,重要的是知道如何嵌入腳本和如何定向腳本的輸出到對話框,作為程序的一部分顯示在屏幕上。這一過程像下面這樣進行:

  1. 用戶啟動地圖程序並打開一個自定義地圖。
  2. 用戶從屏幕上方的已有的工具集中選擇一個新的地址標准化工具。
  3. 彈出一個帶有可以啟動地址標准化進程的啟動按鈕的地址標准化對話框
  4. 一個文本框顯示當前正在被解析的地址。這些文本框很快消失,地址在用戶眼前一閃而過,表示過程啟動並且正在解析。
  5. 出現一個表示整個過程結束的信息,使用了第4步中同樣的文本框。

確定源代碼和項目

首先要做的事情是確定腳本應該嵌入到應用程序源代碼的什么位置。在我們的例子/情境下,這個位置應該是添加到包含工具集項目中的新的對話框。這個對話框會被一個已經存在的用於處理工具欄點擊事件的方法所觸發

當我們確定了需要包含源代碼的項目后,就需要引用IronPython 庫。

如果你使用Visual Studio作為編輯器的話,最簡單的方法是使用Nuget Package Manager來添加IronPython庫到項目中。你可以搜索”IronPython”,然后運行時庫就可以在包管理工具中選擇了。

嵌入腳本

接下來做的才是真正嵌入腳本。你首先要用腳本引擎(scripting engine)來設置一個Python腳本引擎實例。在添加腳本前,你同樣可以設置任何你的腳本所需的特殊的路徑。

第二行告訴.NET框架Python引擎的運行時庫會將輸出重定向到控制台。然而,這並不是重定向到我們為這個應用添加的新的工具所需的對話框中。(下面的代碼會做這個工作)

但是,首先我們需要通過一個簡單的字符串變量來添加腳本。你需要改變你的腳本中的引號來配合字符串的引號工作。

一個簡單的方法是把你腳本中的所有雙引號變成單引號。嵌入腳本的語法如下:

你可能需要處理一些格式問題,但是縮進必須一致。在腳本字符串解析一個有效的字符串后,是時候添加輸出重定向代碼讓腳本的輸出顯示在工具的對話框窗口中了:

在上面這段代碼中,我們設置了一個新的TextWriter,它接受一個TextBoxWriter類型的參數,這使得我們可以把腳本的輸出重新寫到一個文本框中。TextBoxWriter類型的代碼如下:

傳入TextBoxWriter類型的statusText屬性是我們的文本框,它會出現在對話框中,顯示腳本的輸出。我們的Python腳本中的每一個輸出語句都會被重定向到這個文本框。

結論

在本文中,你學會了如何把Python腳本集成到一個.NET程序中,並且把Python的腳本文件輸出到一個.NET對話框。這種無縫銜接,用戶是不會感覺到的,他們並不知道實際上是Python在處理后台的一些工作。

在很多場合下,集成兩種語言是很有用的。我分享了的這一情景,為我的處境提供了很好的解決方案。你可以按照類似的步驟,用同樣的方法把它應用在很多場合。

我建議你去建立一個自己的簡單范例,甚至使用Python腳本文件把Python代碼直接加入到.NET應用中,你確實可以這樣做。當然你並不需要直接把腳本嵌入在.NET源代碼中,但對我來說這樣做最方便。

 

--------------------------------------------------------------------------------------

http://developer.51cto.com/art/200910/157697.htm

學習IronPython最簡單的方法就是使用它,我們建議您下載安裝IronPython 2.6。下載的安裝程序包含了二進制文件、Python標准程序庫、用於Silverlight的IronPython和一個教程。此外,還有一個成為Pyc.py的工具,該工具可以把IronPython應用程序編譯成二進制文件。

交互式解釋器 

Ipy.exe可以用來執行IronPython程序,對於熟悉Python語言及探索.NET程序集來說非常有用。在本文中,交互會話使用>>> 來表示。

  1. >>> from System import Array  
  2. >>> help(Array.CreateInstance)  
  3. Help on built-in function CreateInstance:  
  4.  
  5. CreateInstance(...)  
  6.     Array CreateInstance(Type elementType, Array[int] lengths)  

五、與.NET的集成

IronPython本身是用C# 寫成的。IronPython使用原生的.NET類型,例如IronPython中的字符串類型即.NET字符串類型,整數類型即Int32,等等。通過使用Python的導入手段,我們就能夠訪問.NET程序庫和類。

在使用.NET framework時,通常要導入clr模塊,該模塊含有用來為程序集添加索引之類的函數。一旦為程序集添加了引用,我們就能夠從該程序集的命名空間中導入類。下面以Windows Forms為例進行說明:

  1. >>> import clr  
  2. >>> clr.AddReference('System.Windows.Forms')  
  3. >>> from System.Windows.Forms import Application, Button, Form  
  4. >>>  
  5. >>> form = Form(Text="Hello World")  
  6. >>> button = Button(Text="Click Me")  
  7. >>> form.Controls.Add(button)  
  8. >>>  
  9. >>> def onClick(sender, event):  
  10. ...     print 'Ouch!' 
  11. >>> button.Click += onClick  
  12. >>> Application.Run(form)  
  13. Ouch!  
  14. Ouch!  
  15.  

與.NET的集成 

下面我們對上述代碼中有關的Python語法做相應的介紹。

1. 這里通過Form和Button構造函數的關鍵字參數來設置有關屬性。

2. 事件處理函數(onClick)是一個標准的Python函數,IronPython會在幕后調用按鈕單擊處理程序(EventHandler)。

注意,在Python中,語句結構是用縮排表示的,而不是花括號。onClick函數體相對於其聲明來說,要做縮進處理。

六、Dir函數與help函數

在通過交互式解釋器進行學習的時候,有兩個函數非常有用,它們分別是dir與help函數。Dir(some_object)常用來返回一個對象的所有成員,它們會作為字符串列表返回,而在Python中,我們可以根據需要對列表進行過濾或分割處理。例如,這里我們將顯示系統命名空間中所有以字母“I”開頭的成員:

  1. >>> import System  
  2. >>> for member in dir(System):  
  3. ...     if member.startswith('I'):  
  4. ...         print member  
  5. ...  
  6. IAppDomainSetup  
  7. IAsyncResult  
  8. ICloneable  
  9. IComparable  
  10. IConvertible  
  11. ICustomFormatter  
  12. IDisposable  
  13. IEquatable  
  14. IFormatProvider  
  15. IFormattable  
  16. (and so on...)  
  17. >>>  
  18.  

Help(some_object)函數能夠為我們提供一個對象更為詳細的信息。提供help函數,我們可以打印出對象的所有方法,並針對個別方法再次調用該函數以獲取進一步的信息:

dir函數與help函數 

 
        
  1. >>> from collections import namedtuple  
  2. >>> help(namedtuple)  
  3. Help on function namedtuple in module collections:  
  4.  
  5. namedtuple(typename, field_names, verbose=False)  
  6.     Returns a new subclass of tuple with named fields.  
  7.  
  8.     >>> Point = namedtuple('Point''x y')  
  9.     >>> Point.__doc__                   # docstring for the new class  
  10.     'Point(x, y)' 
  11.     >>> p = Point(11, y=22)             # instantiate with positional args or keywords  
  12.     >>> p[0] + p[1]                     # indexable like a plain tuple  
  13.     33 
  14.     >>> x, y = p                        # unpack like a regular tuple 

Collections模塊是Python標准程序庫的一部分,namedtuple是一個類制造廠,我們可以使用它新建其行為類似枚舉類型(Python沒有內建的枚舉類型)的類:

  1. >>> from collections import namedtuple  
  2. >>> Point = namedtuple('Point''x y')  
  3. >>> point = Point(1, 3)  
  4. >>> point  
  5. Point(x=1, y=3)  
  6. >>> point.x  
  7. >>> point.y  
  8.  

在運行時新建類是動態語言的優點之一。

七、設置sys.path

使用交互式解釋器時,一個重要因素是當我們執行導入語句或者為程序集添加引用時,Python需要到哪里去查找。默認時,所有標准.NET框架都可以被引用。另外IronPython安裝程序也包含有Python標准程序庫。對於別的東西,我們需要告訴IronPython到哪里查找python模塊和程序集。

Python用於查找python模塊時,需要用到稱為sys.path的系統模塊中的一個Python列表。對於IronPython來說,當我們為程序集添加引用的時候,IronPython也是通過sys.path來指出到哪里去尋找程序集的。為了將一個新目錄添加到搜索路徑,只需將該路徑作為字符串附加上去就行,具體如下所示:

  1. >>> import sys  
  2. >>> path = 'c:\\Projects\\MyProject' 
  3. >>> sys.path.append(path)  
  4. >>> import clr  
  5. >>> clr.AddReference('MyAssembly'

由於字符串中的反斜杠被用作轉義字符使用,因此我們必須在路徑中使用雙反斜杠。

到這里,對於IronPython所需要了解的基礎知識也介紹的差不多了。如果你對於在.NET平台上運行Python感興趣,那么就來試試看IronPython吧!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM