2010-03-04 15 views
10

he probado el camino obvio en mi proyecto favorito de código abierto RevitPythonShell (un plug-in para el software de modelado de edificios Autodesk Revit Architecture 2010): code.interact() con el motor IronPython configurado para utilizar .NET corrientes de STDIN y STDOUT. Estos me redirigen a un control TextBox. Funciona un poco, pero en realidad es solo un hack feo.¿Cómo incrustar un shell interactivo de IronPython en una aplicación?

El principal problema es conseguir todas las cosas de la cáscara para trabajar: Flecha arriba y flecha hacia abajo para la historia, la edición, copia & pasta, EOF, resaltado de sintaxis, información sobre herramientas, etc. Se necesita mucho trabajo para conseguir este derecho, y realmente no es el problema que estoy tratando de resolver (estoy tratando de obtener un shell interactivo alojado en Revit, no hacer la GUI de shell perfecta).

Si esto no fuera un proyecto .NET, probablemente buscaría reutilizar PyCrust/PyWrap, pero no estoy seguro si eso se puede hacer desde un proyecto de WinForms. ¿Hay algo similar para .NET?

¿Alguien ha implementado alguna vez la interfaz IConsole y puede mostrar un ejemplo de lo que tendría que hacer? Parece que esta sería la ruta correcta para ir (en lugar de usar el módulo code), pero por mi vida no puedo entenderlo. El código fuente de IronPython no tiene comentarios de ningún tipo.

ACTUALIZACIÓN: Después de probar algunas cosas, finalmente me decidí por el magnífico código IronLab. Incluye un shell de ejemplo con resaltado de sintaxis y todo. El código fue agradable y fácil de integrar. Compruebe el código de RevitPythonShell en sugerencias sobre cómo incrustarlo.

+1

No es realmente una solución enlatada agradable ... así que lo dejaré como un comentario. Podrías ver la fuente de PythonConsole.cs de Matt Ward en el proyecto IDE de SharpDevelop. Mire en SharpDevelop \ src \ AddIns \ BackendBindings \ Python \ PythonBinding \ Project \ Src. Puede ser un gran problema romper esta clase para que pueda usarse (y el ICSharpCode.TextEditor) en otros proyectos. Pero quizás te ayude un poco. Descargue la fuente de SharpDevelop de su servidor de compilación: http://build.sharpdevelop.net/BuildArtefacts o use svn en: svn: //svnmirror.sharpdevelop.net/sharpdevelop/branches/3.0/SharpDevelop – djlawler

+0

no sea tímido;) esta es una muy buena respuesta en sí misma. ¡Lo echaré un vistazo tan pronto como lo haga! –

Respuesta

7

que estaba buscando una cosa similar y descubrí que el proyecto IronLab contiene una buena consola de IronPython. El código fuente se puede encontrar aquí https://github.com/rwg0/ironlab/tree/master/IronPythonConsole.

[edición el 25/10/2016] URL roto fijo

+0

bien, en realidad me mudé a esto hace aproximadamente un año, pero olvidé actualizar mi pregunta. gracias por documentarlo para el resto del mundo. ¡IronPythonConsole del proyecto IronLab es una joya! Puede ver un ejemplo de incrustación en su propio proyecto en el proyecto RevitPythonShell. –

+0

Este enlace está muerto, desafortunadamente. – canton7

+0

Cambió la URL. – Samuel

3

Ok, entonces tengo dos respuestas posibles. Una en el comentario anterior .... y otro mucho más simple (sin intelisense, sin resaltado de sintaxis):

http://www.codeproject.com/KB/edit/irontextbox2.aspx

Es por JoeSox, y es por IronPython 2, no 2.6. Sin embargo, pude actualizarlo para que funcione correctamente con 2.6 en aproximadamente cinco minutos. Si está interesado, puedo encontrar la forma de enviarle un archivo de diferencias o darle una palmada al proyecto actualizado en algún lugar (se publicó bajo una licencia de MIT).

¡Disfrútalo!

David

+0

dulce :) ¡justo lo que estaba buscando! ¡Volveré a informar aquí cuando lo ejecute! –

+0

puede consultar el origen de RevitPythonShell (http: //revitpythonshell.googlecode.com) para tener una idea de cómo integrar esto con el control IronTextBox2 ... –

Cuestiones relacionadas