托管IronPython:导入包含自定义函数的文件

时间:2012-12-14 07:54:27

标签: ironpython

场合

托管IronPython允许开发人员将参数设置为脚本。每次创建一个IPy引擎对象时,我都设置了这样一个参数(ParamName),但是当我尝试导入python模块时,我使用了我的自定义参数,我得到一个异常,消息“全局名称'ParamName'不是定义的”。

代码示例

class PythonScriptingEngine
{
    private ScriptEngine pyEngine;
    private ScriptScope pyScope;

    public PythonScriptingEngine()
    {
        pyEngine = Python.CreateEngine();
        pyScope = pyEngine.CreateScope();
    }

    public object Run(string script)
    {
        ScriptSource source = pyEngine.CreateScriptSourceFromString(script);
        CompiledCode compiled = source.Compile();
        return compiled.Execute(pyScope);
    }

    public void SetParameter(string name, int value)
    {
        pyScope.SetVariable(name, value);
    }
}

// execution
var engine = new PythonScriptingEngine();
engine.SetParameter("ParamName", 10);
engine.Run(@"import SampleScriptWithParamName");

问题

这种情况有解决办法吗?如何导入使用自定义参数的python脚本?

1 个答案:

答案 0 :(得分:3)

正如Simon指出的那样,问题是ParamName不在SampleScriptWithParamName范围内。实现这一目标的一种方法是将其添加到内置变量集中,如下所示:

public void SetParameter(string name, int value)
{
    pyEngine.GetBuiltinModule().SetVariable(name, value);
}

这应该可以在任何地方使用,但我现在无法测试它。