在第一篇中只是简单的创建了一个交互环境,这样还达不到我的目标,为了将python整合进应用,还需要让python和我们的.net应用互相可以访问.
在IronPython Alpha1中,是有一个CHM文档的,下载了正式版之后,居然找不到了...在maillist中问了之后才知道, 原来搞了份DOC档,放在http://dlr.codeplex.com/. 下载之后才发现是专门讲HOST的,真爽(下载页面看这里).
今天的任务比较简单, 向python引擎中放一个简单变量a, 然后用python修改它, 再读回来,代码如:
public void Run1() {
helper.DefaultScope.SetVariable("a", 1);
helper.Execute("print 'visit a in python: ', a");
helper.Execute("print 'modify a into 2'");
helper.Execute("a=2");
object a = helper.DefaultScope.GetVariable("a");
helper.PrintLn("get a from python", a);
}
helper是自己整理了一个专门用于初始化环境并执行python语句的类,以后希望可以逐步整理,并用在以后的应用中.代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Scripting.Hosting;
using IronPython.Hosting;
namespace AccessEach {
///
/// IronPython Helper
///
public sealed class IPHelper {
#region private
private IPHelper() {
_defaultEngine = Python.CreateEngine();
_defaultScope = _defaultEngine.CreateScope();
}
private ScriptEngine _defaultEngine ;
private ScriptScope _defaultScope ;
private static IPHelper _helper = new IPHelper();
public static IPHelper Instance {
get { return _helper; }
}
#endregion
#region IronPython functions
///
/// Get the Default python Engine
///
public ScriptEngine DefaultEngine {
get {
return _defaultEngine;
}
}
///
/// default scrope of default engin
///
public ScriptScope DefaultScope {
get {
return _defaultScope;
}
}
public object Execute(string cmd, ScriptScope scope, ScriptEngine engine) {
ScriptSource source = engine.CreateScriptSourceFromString(cmd, Microsoft.Scripting.SourceCodeKind.Statements);
return source.Execute(scope);
}
public object Execute(string cmd, ScriptScope scope) {
return this.Execute(cmd, scope, _defaultEngine);
}
public object Execute(string cmd) {
return this.Execute(cmd, _defaultScope, _defaultEngine);
}
#endregion
#region 输入输出
public void Print(params object[] objs) {
foreach (object o in objs) {
Console.Write(o);
}
}
public void PrintLn(params object[] objs) {
foreach (object o in objs) {
Console.WriteLine(o);
}
}
#endregion
}
}
执行Run1(), 发现我的目的达到了. 我的.net程序和脚本实现了最简单的交互.
下一篇预告:这样写很无聊,写一个简单的游戏玩一下...用.net做UI和底层,用脚本写逻辑...