Erstellen eine interaktive Shell für .NET-Anwendungen und einbetten Skriptsprachen wie Python / Eisen Python hinein

StackOverflow https://stackoverflow.com/questions/808692

Frage

Ich lernte Python mit dem Tutorial, das mit der Standard-Python-Installation kommt. Einer der Vorteile, die der Verfasser über Python ist „vielleicht haben Sie ein Programm geschrieben haben, die eine Erweiterung Sprache verwenden könnte, und Sie nicht wollen, eine ganz neue Sprache für Ihre Anwendung entwerfen und zu implementieren“ - Meine Frage ist, wie würde ich gehe über ein Programm (mit c #) entwerfen, die Python erweitert werden kann interaktiv mit (dies möglich sein, ich könnte mir vorstellen, dass ich so etwas wie ein „Shell“ oder „interaktiv“ Modus für die .net-Programm müsste erstellen )?

Gibt es Hinweise, wie .NET-Programme zu entwerfen, die eine interaktive Shell haben. Dann mag ich Python-Skript in der Schale verwenden, um „erweitern“ oder mit dem Programm interagieren.

EDIT: Diese Frage zum Teil aus der Demo stammt geben von Miguel de Icaza während PDC 2008, wo er die interaktiven csharp Eingabeaufforderung zeigte, C # 4.0 Ich denke, auch diesen "Compiler als Dienstleistung" Feature . Ich sah das und dachte, wie cool es wäre ein Fenster oder Web-Programm in .NET zu entwickeln sein, die eine interaktive Shell hatte .. und eine Skriptsprache wie Python verwendet werden, um die Funktionen des Programms zu verlängern.

Auch begann ich über diese Art von Funktionalität zu denken, nachdem einer von Steve Yegge Essays zu lesen, wo er über Systeme spricht, die für immer lebt.

War es hilfreich?

Lösung

Das klingt wie eine gute Verwendung von Ironpython.

Es ist ziemlich einfach, ein einfaches Scripting Host von C # einrichten, um Anrufe in Ironpython-Skripte zu ermöglichen, sowie die Möglichkeit in Ironpython C # -Code zu nennen. Es gibt Beispiele und Beispiele auf der CodePlex-Website, die zeigen, wie diese genau das, was zu tun ist.

Eine weitere gute Seite für Beispiele und Proben ironpython.info

Und hier ist eine Seite ein Beispiel gewidmet Ihre sehr Frage zu beantworten, wenn auch nur in einer allgemeinen DLR-zentrierte Art und Weise -. dies erlaubt es dir, Ironpython, IronRuby, oder was auch immer DLR Sprachen, die Sie unterstützen mögen Host

Ich habe diese Beispiele in der Vergangenheit zu schaffen eine Umgebung Ironpython in einer privaten Anlage von ScrewTurn Wiki verwendet - es erlaubt mir sehr ausdrucks Wiki-Vorlagen zu erstellen und erwies sich als sehr nützlich im allgemeinen sein

.

Andere Tipps

Ich war für das gleiche Problem suchen Lösung und fand IronTextBox: http: // www.codeproject.com/KB/edit/irontextbox2.aspx

Es braucht ein wenig Tuning für aktuelle Versionen, aber alles scheint zu sein, die ich brauchte. Zuerst machte es kompiliert und dann Variablen hinzugefügt I von Shell auf den Umfang zugreifen wollte.

Python als Erweiterungssprache "Embedding Python" genannt wird.

Sie können ein Python-Modul von c ++ Aufruf von bascially die Python-Interpreter aufrufen und haben es die Python-Quelle auszuführen. Dies nennt man Einbettung .

Es funktioniert von C und C ++, und wird wahrscheinlich funktionieren genauso gut von C #.

Und nein, Sie brauchen keine Art von „Schale“. Während Python interaktiv sein kann, das ist überhaupt nicht eine Anforderung.

Hier ist ein Link zu einem Blog-Post über IronRuby Skript eine C # .NET-Anwendung hinzugefügt wird.

http: // blog .jimmy.schementi.com / 2008/11 / Additions-Scripting-to-c-Silverlight-app.html

Die Grundsätze würden auch gut funktionieren Ironpython für die Verwendung.

Wenn Ihr Ziel ist es, eine neue Sprache zu vermeiden Lernen Sie verwenden können, CSScript.Net und eingebettete Skripte geschrieben in C # oder VB in Ihre Anwendung. Mit CSScript erhalten Sie vollen Zugriff auf die CLR. Drei verschiedene Modelle der Skriptausführung werden unterstützt, so dass Sie Skript ausführen können, die in der aktuellen Anwendungsdomäne auf Objekte beziehen, ausführen Remote, oder ausführen als Shell.

Zur Zeit ich ccscript als „Klebstoff“ Code verwenden Anwendungsobjekte etwas ähnlich mit Boo für die Konfiguration.

Das Link Aufgaben, die Sie zu einem Code-Projekt Artikel, zur Verfügung stellt ein guter Überblick.

Ich weiß nicht, was Sie mit

bedeuten
  

"erweitern" oder mit dem Programm interagieren

so kann ich Ihre Frage nicht beantworten. Können Sie ein Beispiel geben?

Es ist eine Open-Source-interaktive C # Schale in mono: http: //www.mono-project. com / CsharpRepl

Wenn Sie wie Python, .NET und Spracherweiterung, werden Sie wahrscheinlich wie Boo über Eisen Python. Boo kommt mit einem Open-Source-interaktiv Shell zu.

Ich bin nicht einverstanden mit

  

"Sie wollen nicht, zu entwerfen und zu   implementieren eine ganz neue Sprache für   Ihre Anwendung "

Es ist nicht so schwer, wie es eine einfache DSL zu erstellen zu sein. Es wird Sie nicht Tage dauern zu implementieren, nur wenige Stunden. Es könnte eine interessante Option sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top