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.
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
no sea tímido;) esta es una muy buena respuesta en sí misma. ¡Lo echaré un vistazo tan pronto como lo haga! –