2009-04-30 61 views
13

我正在使用標準python安裝附帶的教程學習python。作者對python的好處之一是「也許你已經編寫了一個可以使用擴展語言的程序,並且你不想爲你的應用程序設計和實現一種全新的語言」 - 我的問題是我開始設計一個可以用Python交互式擴展的程序(使用c#)(爲了這個可能,我會想象我需要爲.net程序創建某種「shell」或「interactive」模式)?爲.NET應用程序創建交互式shell並將腳本語言嵌入python/iron python

是否有任何關於如何設計具有交互式shell的.NET程序的指針。然後,我想在shell中使用python腳本來「擴展」或與程序進行交互。

編輯: PDC 2008中這個問題部分來自演示莖給米格爾奧德伊卡薩在那裏他展示了交互式CSHARP命令提示符,C#4.0中,我認爲也有這種「編譯器即服務」功能。我看了一下,想到在.NET中設計一個具有交互式shell的Windows或Web程序有多酷......而像python這樣的腳本語言可以用來擴展程序提供的功能。

另外,我在閱讀Steve Yegge的一篇論文,談論永久生活的系統時,開始思考這種功能。

+0

幾乎同樣的問題由我:http://stackoverflow.com/questions/801432/how-to-create-idle-like-functionality-to-winforms-application/801443#801443 – Harriv 2009-04-30 20:52:46

+0

你可以使用PythonNET調用C#來自Python和Python的C# – denfromufa 2014-10-06 14:32:23

回答

12

這聽起來像是一個偉大的使用IronPython

從C#中設置一個簡單的腳本主機以允許調用IronPython腳本以及允許IronPython調用您的C#代碼相當容易。 CodePlex網站上有示例和示例說明如何做到這一點。

另一個好發部位爲例子,樣品是ironpython.info

而且here is a page專用的一個例子回答您的問題很,雖然在通用DLR-中心的方式 - 這將讓您的主機的IronPython,IronRuby的,或什麼您想要支持的DLR語言。

我以前用這些例子在ScrewTurn Wiki的私人安裝中創建了一個IronPython環境 - 它允許我創建非常富有表現力的Wiki模板,並且通常證明它非常有用。

+0

謝謝你的鏈接埃裏克。我正在研究如何從C#中設置腳本宿主# – Developer 2009-04-30 20:04:27

+0

任何時間。 =) – 2009-04-30 21:47:05

0

我不知道你的意思

什麼「擴展」或與程序

,所以我不能回答你的問題進行互動。你能給個例子嗎?

有一個在單一個開源的交互式C#殼:http://www.mono-project.com/CsharpRepl

當你像Python,.Net和語言擴展,你可能會喜歡Boo了鐵蟒。 Boo也帶有一個開源的交互式外殼。

我不同意

「你不想爲 設計和 實現一個全新的語言應用程序」

,因爲它曾經是創造它不是硬一個簡單的DSL。它不會花你幾天的時間來實施,只需幾個小時。這可能是一個有趣的選擇。

1

Python作爲擴展語言被稱爲「嵌入Python」。

你可以通過bascially調用python intepreter來調用python模塊,並讓它執行python源文件。這被稱爲embedding

它使用C和C++,並可能從C#中工作。

不,你不需要任何一種「殼」。雖然Python可以是交互式的,但這不是必需的。

3

我一直在尋找同樣的問題的解決方案,並發現IronTextBox:http://www.codeproject.com/KB/edit/irontextbox2.aspx

它需要對當前版本一點點調整,但似乎是我所需要的一切。首先編譯它,然後將我想要從shell訪問的變量添加到範圍中。

1

如果您的目標是要避免學習一種新的語言,您可以使用CSScript.Net和使用C#或VB編寫的嵌入式腳本到您的應用程序中。使用CSScript,您可以完全訪問CLR。支持三種不同的腳本執行模式,以便您可以執行引用當前應用程序域中的對象的腳本,使用遠程執行或執行爲shell。

目前我正在使用CCScript作爲「粘合」代碼來配置應用程序對象有點類似於使用Boo。

linklink任務代碼項目文章,提供了一個很好的概述。