在编程人员需要选择一种合适的计算机语言进行程序开发时,他们脑海中往往会出现Python这一语言。它灵活易用的特点大大的提高了开发人员的效率。在这里我们将会为大家详细介绍一下调用Python脚本的相关方法。#t#
之前简单了解过Python语言,但没有深入和系统的学习过,只是一直觉得它足够的灵活,而且不需要编译(因为Python是解释型语言),所以就一直想把它应用到CodeMaker中,达到一种灵活的、自定义的配置。
1、首先去下载IronPython类库(这里使用 IronPython-v2.6),我们借助IronPython类库,在.Net下运行调用Python脚本。
2、将IronPython以及相关的类库添加到项目引用里。
- IronPython.dll
- IronPython.Modules.dll
- Microsoft.Dynamic.dll
- Microsoft.Scripting.Core.dll
- Microsoft.Scripting.Debugging.dll
- Microsoft.Scripting.dll
- Microsoft.Scripting.ExtensionAttribute.dll
3、只做了个小例子,不是很复杂,所以就直接贴调用Python脚本的代码了。
- // 主方法
- static void Main(string[] args)
- {
- // 创建脚本引擎
- ScriptEngine engine = Python.CreateEngine();
- // 创建一个脚本范围容器
- ScriptScope scope = engine.CreateScope();
- // 设置变量
- engine.SetVariable(scope, "UserName", "cnBlogs");
- // 执行Python脚本,并获取返回值
- ScriptScope resultScope = engine.ExecuteFile("test.py", scope);
- // 输出结果
- Console.WriteLine(resultScope.GetVariable("Result"));
- }
- // Python脚本:
- def GetType(name):
- return "hello " + name;
- Result = GetType(UserName);
调用Python脚本内容是很简单的,声明一个函数,参数为name,函数返回拼接name后的字符串,函数结束。然后调用该函数,参数为UserName,返回值为Result。
脚本中,UserName与主方法中的
engine.SetVariable(scope, "UserName", "cnBlogs");相对应。
Result与主方法中的
resultScope.GetVariable("Result")相对应,而无需再在脚本中声明这两个变量。
执行结果:
可以看到,输出的字符串是从Python脚本中返回的,就可以达到通过修改脚本实现执行结果的变化。
4、调用Python脚本在CodeMaker中的应用
使用方式:
我们以前也提到过已经提过该代码生成工具是采用标签的方式自定义模板,然后根据模板生成代码文件。所以为相应的Python脚本添加了一个script标签。
- < c:script path="test.py" variables="{userName:cnBlogs;password:123456}"
result="Result" />
path:脚本文件路径(相对于EXE文件的路径)
variables:变量容器,原本打算使用类似于JSON格式的,但因为一些特殊符号会影响标签的解析,所以稍微改了一下分隔符,多个变量和值之间用;(分号)隔开。
result:脚本执行结果的返回变量,用于在代码中获取脚本返回值。
用途:在生成实体类的时候,对于类型转换,大部分可以直接使用Convert.ToXXX()这种形式,但对于Guid,却只能用new Guid()这种形式。
借助脚本,就可以在脚本中判断类型,如果是Guid的话,则返回new Guid();若是其他类型,则返回ConvertToXXX();
以上调用Python脚本的方法仅提供思路,若有兴趣,可查看CodeMaker v1.5源代码(这两天整理后发布)。