问题
Situation
Hosted IronPython allows developers to set parameters into script. Every time when a IPy engine object is created, I set such a parameter (ParamName), but when I try to import python module, in which my custom parameter is used, I get an exception with message "global name 'ParamName' is not defined".
Code sample
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");
Question
Is there any workaround to this situation? How can I import python script in which custom parameter is used?
回答1:
As Simon pointed out, the issue is that ParamName
is not in scope for SampleScriptWithParamName
. One way to achieve that is to add it to the set of builtin variables like so:
public void SetParameter(string name, int value)
{
pyEngine.GetBuiltinModule().SetVariable(name, value);
}
This should make it available everywhere, but I don't have the ability to test it right now.
来源:https://stackoverflow.com/questions/13874688/hosted-ironpython-import-files-which-contain-custom-functions