在C#环境中动态调用IronPython脚本(4)

public static void test4()     {         var engine = Python.CreateEngine();         var scope = engine.CreateScope();         engine.Runtime.LoadAssembly(Assembly.LoadFrom("LibforPython.dll"));              string pythonscript =            "from LibforPython import PythonLib\n" +            "o = PythonLib()\n" +            "res = o.Test(6,'add')\n";         engine.CreateScriptSourceFromString(pythonscript).Execute(scope);         Console.WriteLine(scope.GetVariable("res"));     }  

运行以上程序即可。这个例子中,LibforPython.dll是在运行时才引入Python环境中的。对于预先已知的Python可能用到的接口,才用例三的办法更好些,对于预先无法预先定义或“遗忘”的接口,采用本例比较适合。


五、总结

将Python环境“寄宿”于C#环境,进而动态执行用户自定义的脚本,是应用可配置性、灵活性的一种体现(其他动态语言也可以这么做,以Ironpython比较简单)。这一过程包括以下三步:

var engine = Python.CreateEngine();

var scope = engine.CreateScope();

var source = engine.CreateScriptSourceFromString(“…”);

source.Execute(scope);

Python环境与宿主环境的交互(参数传入、传出),则通过ScriptScop的GetVariable和SetVariable进行。

下一个问题就是Python复杂数据类型与C#复杂数据类型的对应以及出错处理等,将在下一篇介绍。这里只把复杂数据类型的对应列出来。

C#                                                           Python      

IronPython.Runtime.List      ――――  List

IronPython.Runtime.SetCollection ―――  Set

IronPython.Runtime.PythonDictionary ―― Dictionary

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwgdgp.html