2009-04-30 8 views
13

Stavo imparando Python usando il tutorial fornito con l'installazione standard di Python. Uno dei vantaggi che l'autore afferma di Python è "forse hai scritto un programma che potrebbe usare un linguaggio di estensione e non vuoi progettare e implementare una lingua completamente nuova per la tua applicazione" - La mia domanda è: come sarebbe vado sulla progettazione di un programma (usando C#) che può essere esteso usando Python in modo interattivo (perché ciò sia possibile, immagino che avrei bisogno di creare una sorta di "shell" o modalità "interattiva" per il programma .net)?Creazione di una shell interattiva per applicazioni .NET e incorporamento di linguaggi di scripting come python/iron python

Esistono indicazioni su come progettare i programmi .NET con una shell interattiva. Vorrei quindi utilizzare lo script python nella shell per "estendere" o interagire con il programma.

EDIT: Questa domanda in parte deriva dalla demo dà da Miguel de Icaza durante PDC 2008 dove ha mostrato il prompt dei comandi csharp interattivo, C# 4.0 Credo che sia anche questo "compilatore come un servizio" caratteristica. L'ho guardato e ho pensato che sarebbe stato bello progettare un Windows o un programma Web in .NET che avesse una shell interattiva ... e un linguaggio di scripting come python potesse essere usato per estendere le funzionalità fornite dal programma.

Inoltre, ho iniziato a pensare a questo tipo di funzionalità dopo aver letto uno dei saggi di Steve Yegge in cui parla di sistemi che vivono per sempre.

+0

Quasi la stessa domanda da me: http://stackoverflow.com/questions/801432/how-to-create-idle-like-functionality-to-winforms-application/801443#801443 – Harriv

+0

è possibile utilizzare PythonNET per chiamare C# da Python e Python da C# – denfromufa

risposta

12

Sembra un ottimo uso di IronPython.

È abbastanza semplice impostare un semplice host di script da C# per consentire le chiamate in script IronPython, oltre a consentire a IronPython di chiamare il codice C#. Ci sono esempi ed esempi sul sito CodePlex che mostrano come fare proprio questo.

Un altro buon sito per gli esempi e campioni è ironpython.info

E here is a page dedicato ad un esempio rispondendo alla stessa domanda, anche se in modo DLR-centric generico - questo permetterebbe di ospitare IronPython, IronRuby, o qualsiasi altra cosa Lingue DLR che vuoi supportare.

Ho usato questi esempi in passato per creare un ambiente IronPython all'interno di un'installazione privata di ScrewTurn Wiki - mi ha permesso di creare modelli Wiki molto espressivi e si è rivelato molto utile in generale.

+0

Grazie per i collegamenti Erik. Sto cercando come impostare un host di script da C# – Developer

+0

in qualsiasi momento. =) –

0

Non so cosa intendi con

"Rivolgo" o interagire con il programma

quindi non posso rispondere alla tua domanda. Puoi fare un esempio?

C'è un interattivo C# shell open source in mono: http://www.mono-project.com/CsharpRepl

Quando come Python, .Net e l'estensione lingua, probabilmente come Boo sopra pitone Ferro. Anche Boo ha una shell interattiva open source.

Non sono d'accordo con

"non si vuole progettare e implementare un nuovo linguaggio per l'applicazione"

Non è così difficile come ha usato per essere quello di creare un semplice DSL. Non ci metteranno giorni per implementare, solo poche ore. Potrebbe essere un'opzione interessante.

+0

Con "estendi" o "interagisci", intendo una shell molto simile a quella del link che hai fornito, questa shell mi permetterà di eseguire comandi che mi forniscono una panoramica dello stato attuale del programma e una shell se potessi utilizzare un metodo fornito dal programma e estenderlo scrivendo qualche script ... – Developer

1

Python come linguaggio di estensione è chiamato "Embedding Python".

è possibile chiamare un modulo python da C++ bascially chiamando l'intepreter python e farlo eseguire il source python. Questo è chiamato embedding.

Funziona da C e C++ e probabilmente funzionerà altrettanto bene da C#.

E no, non è necessario alcun tipo di "shell". Mentre Python può essere interattivo, non è affatto un requisito.

+0

Grazie !!! Stavo cercando di trovare il termine giusto per descrivere il mio pensiero sull'uso di python come linguaggio di estensione. – Developer

+0

Suggerisco di usare IronPython invece di provare a incorporare CPYthon nell'applicazione .NET. – Harriv

3

stavo cercando una soluzione per lo stesso problema, e hanno trovato IronTextBox: http://www.codeproject.com/KB/edit/irontextbox2.aspx

Ha bisogno di un po 'di messa a punto per le versioni attuali, ma sembra essere tutto il necessario. Prima lo ha compilato e poi ho aggiunto le variabili che volevo accedere dalla shell all'ambito.

1

Se il tuo obiettivo è quello di evitare l'apprendimento di una nuova lingua, puoi utilizzare CSScript.Net e gli script incorporati scritti in C# o VB nell'applicazione. Con CSScript hai pieno accesso al CLR. Sono supportati tre diversi modelli di esecuzione di script, in modo che tu possa eseguire uno script che faccia riferimento a oggetti nel tuo dominio di app corrente, eseguito usando il remoting o eseguito come shell.

Attualmente sto usando CCScript come codice "colla" per la configurazione di oggetti applicativi in ​​qualche modo simile all'uso di Boo.

Questo link esegue l'attività in un articolo di progetto di codice che fornisce una buona panoramica.

Problemi correlati