2014-04-17 9 views
6

Ho il seguente problema: Ho una vecchia applicazione scritta in python. Questa applicazione consente all'utente di specificare piccoli passi python che verranno eseguiti, i passaggi python sono fondamentalmente piccoli script python, io li chiamo passi perché l'esecuzione di questa applicazione comporta altri passaggi come l'esecuzione di qualcosa da riga di comando. Questi passaggi Python sono memorizzati come codice Python in un file xml.Integrazione di Python nell'applicazione C#

Ora voglio riscrivere l'applicazione utilizzando C# .NET. Esiste una soluzione best practice per fare qualcosa del genere?

Non voglio chiamare python come programma esterno e passare il vero passo python (script) all'interprete python - Voglio qualcosa di integrato. Ho appena incontrato IronPython e .NET python ma non sono abbastanza sicuro quale usare. Voglio ottenere una sorta di debug per i piccoli script, ecco perché la chiamata alla soluzione dell'interprete non è accettabile.

Ciò che è più importante è che molti di questi script esistono già. Quindi devo usare un'implementazione di Python in C# che abbia la stessa sintassi di python e lo stesso costruito nelle lib di python. È possibile?

Grazie e saluti Xeun

risposta

6

IronPython è ciò che si desidera. Si compila in bytecode .NET. Si può ragionevolmente chiamare codice Python da un altro linguaggio .NET (e viceversa). IronPython è supportato anche in Visual Studio, penso.

+0

Il potenziale problema principale con IronPython è se questi script utilizzano eventuali estensioni C - se sono solo puro Python + stdlib dovrebbero andare bene. –

+0

Gli script possono utilizzare le estensioni C in questo modo. C'è qualche problema con questo? – Xeun

+1

Attualmente sto cercando di capire come unire numpy/matplotlib in un progetto C#, per semplificare la visualizzazione di alcuni dati. Ironpython sembra essere rimasto indietro, poiché quelle librerie non sembrano essere disponibili. – Bovaz

-2

Gli script Python possono essere eseguiti da C# con IronPython.

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

Consulta anche:

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

e

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

+0

Uolot è venuto con un'altra soluzione btw, compilare il tuo python con p2exe e chiamarlo da .NET https://stackoverflow.com/questions/1371994/importing-external -module-in-IronPython – FrankyHollywood