Пример использования Python как встроено скриптового языка.
Пример на C# с использованием IronPython.
Исходный код + скомпилированный exe
Для начала качаем IronPython.
Так как у меня стоит VS 2008 Express Edition c Framework 3.5 то я скачал версию 2.6.2
- Создаем проект в Visual Studio
- Добавляем ссылку на библиотеки. Выбираем в меню «Project» — «Add Reference…»
- Добавляем файлы из каталога IronPython
У меня это каталог: «c:Program FilesIronPython 2.6»
Теперь прописываем нужное пространство имен:
using IronPython.Hosting; using IronPython.Runtime; using Microsoft.Scripting; using Microsoft.Scripting.Hosting;
На форме у меня 3 поля TextBox:
textPython — Содержит код python
textResult — выводим результат работы скрипта
textError — выводим сообщение о ошибке
Код отвечающий за выполнение скрипта
private void RunScript() { textResult.Clear(); ScriptEngine engine; ScriptRuntime runtime; ScriptSource source = null; MemoryStream ms = new MemoryStream(); try { engine = Python.CreateEngine(); runtime = engine.Runtime; runtime.IO.SetOutput(ms, Encoding.ASCII); // Указываем что вывод делать в поток } catch (Exception ex) { textError.AppendText("Ошибка иницилизациии IronPython: " + ex.Message); return; } try { source = engine.CreateScriptSourceFromString(textPython.Text, SourceCodeKind.AutoDetect); ScriptScope scope = runtime.CreateScope(); scope.SetVariable("result", textResult); // Переменная ссылается на контрол CompiledCode compil = source.Compile(); object result = compil.Execute(scope); if (result != null) textResult.AppendText(result.ToString() + "n"); byte[] arr_byte = ms.ToArray(); string text = Encoding.ASCII.GetString(arr_byte); textResult.AppendText(text); } catch (Exception ex) { textError.AppendText(ex.Message + "n"); return; } tabControl.SelectedTab = tabResult; }
Смотрите также на эту тему:
- Статья на хабре
- msdn
- Блог гражданина Bernie Almosni