[IronPython] Loading DLL from pyc.py into ScriptEngine

hellosticky hellosticky at gmail.com
Wed Aug 27 00:46:00 CEST 2008


Thanks, I will try that. Can you explain again how just doing "import test" executes the test.py file that was compiled into the DLL? It's not very logical..

Thanks, 

> -----Original Message-----
> From: Srivatsn Narayanan [mailto:srivatsn at microsoft.com] 
> Sent: Tuesday, August 26, 2008 6:34 PM
> To: Discussion of IronPython; hellosticky at gmail.com
> Subject: RE: [IronPython] Loading DLL from pyc.py into ScriptEngine
> 
> Also Assembly.Load is not sufficient to be able to import the 
> compiled code. A clr.AddReference needs to be done which 
> publishes the module. The easiest way to do that is include 
> it in the string as Michael pointed out.
> 
> ScriptSource source = 
> engine.CreateScriptSourceFromString("import 
> clr;clr.AddReference(\"test.dll\");import test", 
> SourceCodeKind.Statements);
> 
> You might need to add the current folder to the path as well 
> before the clr.AddReference.
> 
> -----Original Message-----
> From: users-bounces at lists.ironpython.com 
> [mailto:users-bounces at lists.ironpython.com] On Behalf Of Michael Foord
> Sent: Tuesday, August 26, 2008 3:12 PM
> To: hellosticky at gmail.com; Discussion of IronPython
> Subject: Re: [IronPython] Loading DLL from pyc.py into ScriptEngine
> 
> hellosticky wrote:
> > I also tried:
> >
> >             Assembly assembly = Assembly.Load(AssemblyName);
> >             ScriptRuntime runtime = ScriptRuntime.Create();
> >             runtime.LoadAssembly(assembly);
> >             ScriptScope scope = runtime.ExecuteFile("test.py");
> >             object o = scope.Execute(null);
> >
> > But that threw a script not found exception saying it could 
> find the source file for test.py, so it would seem like this 
> wants to recompile it
> >
> >
> >> -----Original Message-----
> >> From: hellosticky [mailto:hellosticky at gmail.com]
> >> Sent: Tuesday, August 26, 2008 5:52 PM
> >> To: IronPython
> >> Subject: Loading DLL from pyc.py into ScriptEngine
> >>
> >> Hi,
> >>
> >> I created an IronPython DLL with "ipy.exe pyc.py /out:test
> >> /target:dll test.py" which created test.dll. Now, from C#,
> >> I'd like to execute test.py from test.dll. I just opened up
> >> dlr-spec-hosting and there's a CreateScriptSourceFromStream,
> >> but I don't see that in 2.0 Beta 4 bits. Here is where I'm
> >> stuck. How do I get that assembly into the engine and then
> >> execute test.py?
> 
> Well - the easiest way is to execute 'import test' after having added
> the assembly. This should execute the code in order to create 
> a module.
> 
> ScriptScope scope = engine.CreateScope();
> ScriptSource source = 
> engine.CreateScriptSourceFromString("import test",
> SourceCodeKind.Statements);
> engine.Execute(scope);
> 
> There is an API for setting a stream as stdout on an engine -
> 'runtime.IO.SetOutput'.
> 
> Michael
> 
> >>  Also, I'd like to get the output into a
> >> string (I guess I can just redirect Console.Out?)
> >>
> >> public string Execute(string assemblyName)
> >> {
> >>     string content = null;
> >>
> >>     Assembly assembly = Assembly.Load(assemblyName);
> >>     ScriptRuntime runtime = ScriptRuntime.Create();
> >>     ObjectOperations operations = runtime.CreateOperations();
> >>     ScriptEngine engine = runtime.GetEngine("py");
> >>     // magic..
> >>
> >>     return content;
> >> }
> >>
> >> Thanks,
> >>
> >
> > _______________________________________________
> > Users mailing list
> > Users at lists.ironpython.com
> > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> >
> 
> 
> --
> http://www.ironpythoninaction.com/
> http://www.voidspace.org.uk/
> http://www.trypython.org/
> http://www.ironpython.info/
> http://www.theotherdelia.co.uk/
> http://www.resolverhacks.net/
> 
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> 
> 




More information about the Ironpython-users mailing list