21 апреля 2011 г.

C# 4.0 + IronPython 2.7

Простейший пример встраивания интерпретатора IronPython в наше .NET приложение.
Допустим имеем питоновский класс:


  1. class Calculator(object):  
  2.     def add(self, a, b):  
  3.         return a + b  
Создадим простое консольное приложение на C# вызывающее метод add питоновского класса Calculator.

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using IronPython.Hosting;  
  6. using IronPython.Runtime;  
  7. using Microsoft.Scripting;  
  8. using Microsoft.Scripting.Hosting;  
  9.   
  10. namespace ConsoleApplication1  
  11. {  
  12.     class Program  
  13.     {  
  14.         static void Main(string[] args)  
  15.         {  
  16.             int x = 1;  
  17.             int y = 2;  
  18.             string scriptPath = "Calculator.py";  
  19.               
  20.             ScriptEngine engine = Python.CreateEngine();  
  21.             ScriptSource source = engine.CreateScriptSourceFromFile(scriptPath);  
  22.             ScriptScope scope = engine.CreateScope();  
  23.             ObjectOperations op = engine.Operations;  
  24.             source.Execute(scope);  
  25.   
  26.             dynamic Calculator = scope.GetVariable("Calculator");  
  27.             dynamic calc = Calculator();  
  28.             System.Console.WriteLine( calc.add(x,y));  
  29.             System.Console.WriteLine(calc.add(12, 22));  
  30.             System.Console.WriteLine(calc.add("a""b"));  
  31.         }  
  32.     }  
  33. }  
Библиотеки классов Microsoft.Scripting и IronPython находятся в папке с установленным IronPython. Результатом выполнения программы будет: "3, 34, ab".