Встраивание IronPython в C # - PullRequest
9 голосов
/ 12 мая 2011

Я просто изучаю использование IronPython с C # и, похоже, не могу найти какую-либо отличную документацию для того, что мне нужно.В основном я пытаюсь вызвать методы из файла .py в программу на C #.

У меня есть следующее, что открывает модуль:

var ipy = Python.CreateRuntime();
var test = ipy.UseFile("C:\\Users\\ktrg317\\Desktop\\Test.py");

Но я не уверен, как здесьполучить доступ к методу внутри там.В примере, который я видел, используется ключевое слово dynamic, однако на работе я работаю только на C # 3.0.

Спасибо.

Ответы [ 2 ]

9 голосов
/ 12 мая 2011

См. встраивание на сайте Voidspace.

Пример там, Калькулятор IronPython и оценщик работают над простым выражением Pythonоценщик вызывается из C# программы.

public string calculate(string input)
{
    try
    {
        ScriptSource source =
            engine.CreateScriptSourceFromString(input,
                SourceCodeKind.Expression);

        object result = source.Execute(scope);
        return result.ToString();
    }
    catch (Exception ex)
    {
        return "Error";
    }
}
6 голосов
/ 12 мая 2011

Вы можете попробовать использовать следующий код,

ScriptSource script;
script = eng.CreateScriptSourceFromFile(path);
CompiledCode code = script.Compile();
ScriptScope scope = engine.CreateScope();
code.Execute(scope);

Это из этой статьи.

Или, если вы предпочитаете вызывать метод, вы можете использовать что-то вроде этого,

using (IronPython.Hosting.PythonEngine engine = new IronPython.Hosting.PythonEngine())
{
   engine.Execute(@"
   def foo(a, b):
   return a+b*2");

   // (1) Retrieve the function
   IronPython.Runtime.Calls.ICallable foo = (IronPython.Runtime.Calls.ICallable)engine.Evaluate("foo");

   // (2) Apply function
   object result = foo.Call(3, 25);
}

Этот пример взят из здесь .

...