2009-04-30 851 views
13

Estaba aprendiendo python usando el tutorial que viene con la instalación estándar de python. Uno de los beneficios que afirma el autor sobre python es "tal vez haya escrito un programa que podría usar un lenguaje de extensión, y no desea diseñar e implementar un lenguaje completamente nuevo para su aplicación" - Mi pregunta es cómo lo haría voy diseñando un programa (usando C#) que se puede extender usando Python de forma interactiva (para que esto sea posible, me imagino que necesitaría crear algún tipo de modo "shell" o "interactivo" para el programa .net)?Crear un shell interactivo para aplicaciones .NET e incrustar lenguajes de scripts como python/iron python en él

¿Hay algún indicador sobre cómo diseñar programas .NET que tengan un shell interactivo. Luego me gustaría utilizar el script de Python en el shell para "extender" o interactuar con el programa.

EDIT: Esta pregunta surge en parte de la demo dar por Miguel de Icaza durante PDC 2008 donde mostró el símbolo del sistema interactivo CSharp, C# 4.0 creo que también tiene esta "compilador como un servicio" característica. Miré eso y pensé en lo genial que sería diseñar un programa de Windows o web en .NET que tuviera un shell interactivo ... y un lenguaje de scripts como python podría usarse para extender las funciones provistas por el programa.

Además, comencé a pensar en este tipo de funcionalidad después de leer uno de los ensayos de Steve Yegge donde habla de sistemas que viven para siempre.

+0

Casi la misma pregunta hecha por mí: http://stackoverflow.com/questions/801432/how-to-create-idle-like-functionality-to-winforms-application/801443#801443 – Harriv

+0

puede usar PythonNET para llamar a C# de Python y Python de C# – denfromufa

Respuesta

12

Esto suena como un gran uso de IronPython.

Es bastante fácil configurar un host de scripting simple desde C# para permitir llamadas a scripts IronPython, así como permitir que IronPython llame a su código C#. Hay muestras y ejemplos en el sitio CodePlex que muestran cómo hacer esto mismo.

Otro buen sitio para ver ejemplos y muestras es ironpython.info

Y here is a page dedicada a un ejemplo respondiendo a tu pregunta misma, aunque de una manera genérica DLR-céntrico - esto permitiría que usted reciba IronPython, IronRuby, o lo que sea Idiomas DLR que desea admitir.

He utilizado estos ejemplos en el pasado para crear un entorno IronPython dentro de una instalación privada de ScrewTurn Wiki - me permitió crear plantillas de Wiki muy expresivas y resultó ser muy útil en general.

+0

Gracias por los enlaces Erik. Estoy investigando cómo se puede configurar un host de scripting desde C# – Developer

+0

en cualquier momento. =) –

0

No sé a qué se refiere con

"extender" o interactuar con el programa

así que no puedo responder a su pregunta. ¿Puede dar un ejemplo?

No es un código abierto C# interactivo cáscara en mono: http://www.mono-project.com/CsharpRepl

Al igual que pitón, .Net y extensión del lenguaje, que va a gustar Boo sobre ironpython. Boo viene con un shell interactivo de código abierto también.

no estoy de acuerdo con

"no desea diseñar y implementar un nuevo lenguaje para su aplicación"

No es tan duro como lo que solía ser la creación de un DSL simple. No te llevará días implementarlo, solo horas. Puede ser una opción interesante.

+0

Al "extender" o "interactuar", me refiero a un shell muy parecido al que está en el enlace que proporcionó, este shell me permitirá ejecutar comandos que me dan una idea del estado actual del programa y un shell si puedo consumir algún método proporcionado por el programa y extenderlo escribiendo algún script ... – Developer

1

Python como lenguaje de extensión se denomina "Incrustar Python".

puede llamar a un módulo python desde C++ llamando básicamente al intepreter python y hacer que ejecute la fuente python. Esto se llama embedding.

Funciona desde C y C++, y probablemente funcione igual de bien desde C#.

Y no, no necesita ningún tipo de "caparazón". Si bien Python puede ser interactivo, no es un requisito en absoluto.

+0

¡Gracias! Estaba luchando por encontrar el término correcto para describir mi pensamiento sobre el uso de Python como lenguaje de extensión. – Developer

+0

Sugiero usar IronPython en lugar de intentar incrustar CPYthon en la aplicación .NET. – Harriv

3

que estaba buscando una solución para el mismo problema, y ​​se encontró IronTextBox: http://www.codeproject.com/KB/edit/irontextbox2.aspx

Se necesita un poco de ajuste para las versiones actuales, pero parece ser todo lo que necesitaba. Primero lo compilé y luego agregué las variables a las que quería acceder desde el shell hasta el alcance.

1

Si su objetivo es evitar aprender un nuevo idioma, puede usar CSScript.Net y scripts incrustados escritos en C# o VB en su aplicación. Con CSScript tiene acceso completo al CLR. Se admiten tres modelos diferentes de ejecución de scripts para que pueda ejecutar secuencias de comandos que hagan referencia a objetos en su dominio de aplicación actual, ejecutar mediante comunicación remota o ejecutar como un shell.

Actualmente estoy usando CCScript como código "pegamento" para configurar objetos de aplicación de forma similar al uso de Boo.

Este link le asigna un artículo de proyecto de código que proporciona una buena descripción general.

Cuestiones relacionadas