如何在C#中调用 IronPython 代码 (基于IronPython 2.0A3)
前不久,IronPython发布了2.0A3,早期的1.1版本我早有耳闻,可是一直没有机会尝试使用。由于工作需要,今天尝试了一下。
在网上说的最多的就是在IronPython调用.Net的核心类库或其它的Assembly对象,却很少描述如何从C# 中调用IronPython。就算有也只是零零碎碎地只言片语,或者就是早期的1.1版本。
由于在两个版本中,C#中的调用方式上存在很大差别。所以费了不少周折。
1 PythonEngine pe = PythonEngine.CurrentEngine; //It requires to analyze parameters.
2 IScriptModule sm = pe.CreateModule("Demo");
3 sm.SetVariable("x", 1);
4 sm.SetVariable("y", 2);
5 object s = pe.Evaluate("x>y", sm);
2 IScriptModule sm = pe.CreateModule("Demo");
3 sm.SetVariable("x", 1);
4 sm.SetVariable("y", 2);
5 object s = pe.Evaluate("x>y", sm);
上面的代码演示了如何从C#中调用一个Lambda表达式然后返回结果,首先创建一个Python引擎,然后向模块中注册两个参数并设置Value(有些和CommandParameter对象相似),然后使用计算方法完成并返回调用结果。
但是这种调用方式存在一种弊端,就是必须主动的分析表达式中的参数个数,以便注册参数。更简单的方法我还在研究中,如果找到了,我会立刻更新文档,如果哪位朋友已经找了,还希望不惜赐教。