Как общаться из скрипта Python с открытым интерфейсом С#?

Я планирую использовать IronPython вместе с C# для следующего варианта использования.

Я хочу показать некоторые функции, которые можно вызывать с помощью скрипта Python.

Такой скрипт будет вызываться приложением C#.

Например, в C# может быть подготовлена ​​функция ClearUserInput(), которая очищает некоторые данные в WPF. Затем я мог бы открыть больше функций через какой-то интерфейс.

public interface IScriptContract
{
   void ClearMainWindow();
   void LoadProject(string projectName);
}

скрипт питона:

print "clearing window"
ClearMainWindow() --how to cooperating with C# code?
print "load proj"
ClearMainWindow("project.proj") --how to cooperating with C# code?

Я хочу, чтобы пользователь мог написать сценарий, который может вызывать мою функцию .net.

Возможно ли это сделать?


person komizo    schedule 14.09.2015    source источник
comment
См. здесь - stackoverflow.com/questions/7367976 /   -  person Evk    schedule 15.09.2015


Ответы (1)


Стандартный способ сделать это — создать «хост-объект», который передается в скрипты, обеспечивающие доступ к хост-приложению (если вы знакомы с веб-программированием, то это экземпляр window).

В IronPython вы можете использовать SetVariable для объекта ScriptScope, который выполняет ваш код:

var contract = new ScriptContract();

var engine = Python.CreateEngine();
var mainScope = engine.CreateScope();

var scriptSource = engine.CreateScriptSourceFromFile("test.py", Encoding.Default, SourceCodeKind.File)

mainScope.SetVariable("host", contract);

scriptSource.Execute(scope);

Из python он всегда доступен:

host.ClearMainWindow()
person Jeff Hardy    schedule 15.09.2015