如何从 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()
我计划将 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()