摘要:IronPython 牛刀小試
Microsoft TechEd 2007 有一個場次是介紹 IronPython, 看了該場研討會的錄影之後,我也下載了最新版的 IronPython (v2.0 alpha 7) ,嘗試依樣畫葫蘆,寫一點好玩的範例程式。我試寫了 Microsoft Agent(你或許曾在 MS Word 裡面看過它)以及 Speech Synthesizer 範例,執行結果如下圖:
我的環境是 Windows Server 2003 + Microsoft .NET Framework 2.0 + IronPython 2.0 alpha 7,以下是練習步驟:
- 由於我們要使用 Microsoft Agent,而 MS Agent 須透過 COM 元件的方式呼叫,因此要先產生 AgentServer 的 type library。前面這段話若不了解也不打緊,照此步驟進行即可:先開啟 .NET Framework SDK 2.0 的 Command Prompt 視窗,將現行目錄切換至 C:\ 根目錄,然後輸入
tlbimp c:\WINDOWS\msagent\agentsvr
如此便會在 C:\ 之下產生 AgentServerObjects.dll。這個 type library 稍後會在程式中用到。 - 下載 IronPython 壓縮檔(只需下載 runtime binary 的版本),解開後執行其中的 ipy.exe。
- 逐一輸入下列程式碼:
import sys
sys.path.append("c:\\")
import clr
clr.AddReferenceToFile("AgentServerObjects.dll")
from AgentServerObjects import AgentServerClass
agent = AgentServerClass()
id, rest = agent.Load('merlin.acs')
ch = agent.GetCharacter(id)
ch.SetSize(256, 256)
ch.MoveTo(0, 0, 0)
ch.Show(0)
ch.MoveTo(600, 100, 2000)
ch.Play("Announce")
ch.MoveTo(300, 150, 1000)
ch.Play("Think")
ch.Think("IronPython 好好玩!")
ch.Play("Search")
ch.Play("Congratulate")
ch.Play("Wave")
ch.Hide(0)
IronPython 是動態語言(dynamic language),有意思的地方也在這裡,如果上面的程式碼你不是一次貼上去,而是逐行輸入的話,每輸入一行敘述,該敘述就會立刻被解譯並執行。因此, 當 agent 物件(這裡建立的是「梅林」agent)秀在畫面上之後,你輸入的每一行敘述就像在對 agent 物件下達指令,你說一動,它就做一動。
接著是語音範例,同樣在 IronPython 命令視窗中輸入以下程式碼:
import clr
clr.AddReference("System.Speech")
from System.Speech.Synthesis import *
ss = SpeechSynthesizer()
ss.Speak("Hello from IronPython")
將喇叭打開,你應該可以聽到電腦將 "Hello from IronPython" 這個句子用英文唸出來。
IronPython 也有 IDE 工具,叫做 IronPython Studio,如果你想試試看,可以照以下步驟安裝:
- 下載 Microsoft Visual Studio 2008 Shell (isolated mode) Redistributable Package。下載的檔案是自解包,而非安裝程式,它會將檔案解壓縮至 C:\VS 2008 Shell Redist\Isolated Mode\ 目錄下,你必須執行其中的 vs_shell_isolated.enu.exe 才會開始安裝 VS2008 Shell。
- 下載並安裝 IronPython Studio。
安裝完成後,從程式集中可以找到 IronPython Studio 的捷徑。開啟 IronPython Studio 之後,就跟撰寫一般的程式一樣,先 New 一個 Console project,然後將前面的程式碼貼上,再按 F5......。不過,前面的 MS Agent 範例必須以單步除錯的方式逐步執行,若以 F5 的方式執行程式,梅林的動作執行到一半就會因為程式已經結束而消失了。
感覺上,用 IronPython Studio 這種 IDE 環境來寫 python 程式,反而沒有命令列的方式來得有趣,而且,它的 Intellisense 提示功能也還太陽春。Just for fun :)