Я испробовал очевидный путь в своем любимом проекте с открытым исходным кодом RevitPythonShell (плагин для программного обеспечения для моделирования зданий Autodesk Revit Architecture 2010): code.interact()
с механизмом IronPython, настроенным для использования .NET потоки для STDIN
и STDOUT
. Затем я перенаправляю их на TextBox
элемент управления. Это вроде работает, но на самом деле это всего лишь уродливый взлом.
Основная проблема заключается в том, чтобы заставить работать все компоненты оболочки: стрелки вверх и вниз для истории, редактирования, копирования и вставки, EOF, подсветки синтаксиса, подсказок и т. Д. Требуется много работы, чтобы поймите это правильно , и это не та проблема, которую я пытаюсь решить (я пытаюсь получить интерактивную оболочку, размещенную в Revit, а не сделать идеальный графический интерфейс оболочки).
Если бы это был не проект .NET, я бы, вероятно, рассмотрел возможность повторного использования PyCrust / PyWrap , но я не уверен, что это можно сделать из проекта WinForms. Есть что-нибудь подобное для .NET?
Кто-нибудь когда-либо реализовывал интерфейс IConsole
и может показать пример того, что мне нужно сделать? Кажется, что это был бы правильный путь (в отличие от использования модуля code
), но я не могу с этим разобраться. Исходный код IronPython не имеет никаких комментариев.
ОБНОВЛЕНИЕ: Попробовав кое-что, я в итоге остановился на превосходном IronLab коде. Он включает в себя пример оболочки с подсветкой синтаксиса и все. Код был приятным и легко интегрируемым. Проверьте код RevitPythonShell на подсказки о том, как его встраивать.