如何从 python 脚本到 C# 公开接口进行通信?

How to communicate from python script to C# exposed interface?

我计划将 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 object' 传递到提供对主机应用程序的访问的脚本(如果您熟悉网络编程,这就是 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()