2014-04-17 13 views
6

Ich habe folgendes Problem: Ich habe eine alte Anwendung, die in Python geschrieben ist. Diese Anwendung ermöglicht es dem Benutzer, kleine Python-Schritte zu spezifizieren, die ausgeführt werden, Python-Schritte sind im Grunde kleine Python-Skripte, ich nenne sie Schritte, weil die Ausführung dieser Anwendung andere Schritte wie das Ausführen von etwas von der Kommandozeile beinhaltet. Diese Python-Schritte werden als Python-Code in einer XML-Datei gespeichert.Integration von Python in C# -Anwendung

Jetzt möchte ich die Anwendung mit C# .NET neu schreiben. Gibt es eine Best-Practice-Lösung, um so etwas zu tun?

Ich möchte Python nicht als externes Programm aufrufen und den eigentlichen Python-Schritt (Skript) an den Python-Interpreter übergeben - ich will etwas eingebaut. Ich bin gerade auf IronPython und .NET Python gestoßen, aber ich bin mir nicht ganz sicher welches zu verwenden. Ich möchte eine Art Debugging für die kleinen Skripte erreichen, deshalb ist der Aufruf der Interpreterlösung nicht akzeptabel.

Was wichtiger ist, ist, dass viele dieser Skripte bereits existieren. Daher muss ich eine C# -Implementierung von Python verwenden, die die gleiche Syntax wie Python und die gleichen eingebauten Bibliotheken von Python hat. Ist das überhaupt möglich?

Danke und Grüße Xeun

Antwort

6

IronPython ist das, was Sie wollen. Es kompiliert zu .NET-Bytecode. Sie können relativ einfach Python-Code aus einer anderen .NET-Sprache aufrufen (und umgekehrt). IronPython wird auch in Visual Studio unterstützt, denke ich.

+0

Das Haupt potenzielles Problem mit Ironpython ist, wenn diese Skripte alle C-Erweiterungen verwenden - wenn sie sind nur reine Python + stdlib sollten sie in Ordnung sein. –

+0

Die Skripte können C-Erweiterungen verwenden. Gibt es ein Problem damit? – Xeun

+1

Ich versuche gerade herauszufinden, wie man einige numpy/matplotlib in einem C# -Projekt zusammenführt, um die Anzeige einiger Daten zu vereinfachen. Ironpython scheinen weit zurückgefallen zu sein, da diese Bibliotheken anscheinend nicht verfügbar sind. – Bovaz

-2

Python-Skripte können von C# mit IronPython ausgeführt werden.

var ipy = Python.CreateRuntime(); 
    dynamic test = ipy.UseFile("Test.py"); 
    test.Simple(); 

Siehe auch:

http://putridparrot.com/blog/hosting-ironpython-in-a-c-application/

und

https://blogs.msdn.microsoft.com/charlie/2009/10/25/running-ironpython-scripts-from-a-c-4-0-program/

+0

Uolot kam mit einer anderen Lösung BTW, kompilieren Sie Ihre Python mit p2exe und rufen Sie das von .NET https://StackOverflow.com/questions/1371994/importing-external -Modul-in-Eisenpython – FrankyHollywood