如何从python脚本通信到c#暴露的接口



我计划在以下用例中使用IronPython和c#。

我想公开一些可以通过python脚本调用的函数。

这样的脚本将被c#应用程序调用。

例如,可以在c# ClearUserInput()中准备函数来清除WPF上的一些数据。然后我可以通过一些接口暴露更多的函数。

public interface IScriptContract
{
   void ClearMainWindow();
   void LoadProject(string projectName);
}
python脚本:

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

我希望用户可以写一些脚本,可以调用我的。net函数。

这可能吗?

这样做的标准方法是创建一个'host对象',它被传递到脚本中,提供对主机应用程序的访问(如果你熟悉web编程,那就是window实例)。

在IronPython中,你可以在执行代码的ScriptScope对象上使用SetVariable:

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()

最新更新