IronPython в приложение на C#

Пример использования 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;
            
        }

 

Смотрите также на эту тему:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *