[IronPython] hosting and SetVariable

Slide slide.o.mix at gmail.com
Thu May 29 17:13:33 CEST 2008


Perhaps this is just missing knowledge on my part, but here goes.

I am using IP2.0 with the hosting API to add scripting support to my
application. I use the following code to create my main module from
the script file the user selects:

 ICompiledCode code =
IronPython.Hosting.PythonEngine.CurrentEngine.Compile(SourceUnit.CreateFileUnit(_context,
path), _error_sink);
__main__ = code.MakeModule("__main__") as ScriptScope;

// create our module.
ScriptDomainManager.CurrentManager.PublishModule(__main__, "__main__");

// add all the references the "Host" wanted.
foreach (string assembly in _assemblies)
      Microsoft.Scripting.ClrModule.GetInstance().AddReference(Path.GetFileNameWithoutExtension(assembly));

// set all the variables that the "Host" wanted set.
foreach (KeyValuePair<string, object> obj in _objects)
      __main__.SetVariable(obj.Key, obj.Value);

The last foreach is setting up my object model which is available to
my scripts. My problem arises when I want to use one of these
variables from a script that is imported from the user selected script
file.

For instance, if I add an object _objects.Add("MyObj", someObj), I can
reference that object in the user script as MyObj with no problem.
What I would like to do is have these variables global to all scripts
that are imported, etc. I tried import __main__ in my other scripts,
but __main__ doesn't show up in sys.modules (which is what I thought
PublishModule would do, but thats a different story).

Am I going about this the wrong way?

Thanks

slide

-- 
slide-o-blog
http://slide-o-blog.blogspot.com/



More information about the Ironpython-users mailing list