From: Jeff E. <jem...@fr...> - 2007-09-19 17:59:54
|
I haven't tried this. It might work in your cirumstance. // Remove old __main__. Py.getSystemState().modules.__delitem__("__main__"); // Recreate. mod = imp.addModule("__main__"); interp.setLocals(mod.__dict__); Balaji Srinivasan wrote: > Hi JeffIve run into another problem with the code below. Looks like there is > some static state. So if I evaluate two different code segments with the > same JVM (but different interpreter instances), I get the symbols from both > runs. Is there any way I can clean up the global namespace? > Thanks > Balaji > > On 9/18/07, Balaji Srinivasan <bal...@gm...> wrote: >> Thanks a lot Jeff. That worked.!! >> >> >> Balaji >> >> On 9/18/07, Jeff Emanuel < jem...@fr...> wrote: >>> import org.python.core.imp; >>> import org.python.core.PyModule; >>> >>> Balaji Srinivasan wrote: >>>> Thanks Jeff. But what is imp? >>>> I tried interp.addModule and that doesnt compile.Thanks >>>> Balaji >>>> >>>> On 9/18/07, Jeff Emanuel < jem...@fr...> wrote: >>>>> Add this after creating your interpreter: >>>>> >>>>> PyModule mod = imp.addModule("__main__"); >>>>> interp.setLocals(mod.__dict__); >>>>> >>>>> >>>>> Balaji Srinivasan wrote: >>>>>> Hi EveryoneI found a difference between the way jython works when it >>> is >>>>>> called from the command line and when it is called from a java >>> program. >>>>> Ive >>>>>> tried my best to explain it and get a workaround but all attempts >>> have >>>>>> failed. I will appreciate any help. >>>>>> >>>>>> >>>>>> What I want to do is given a script string I want to find all the >>>>> functions >>>>>> defined in the script. >>>>>> Lets say the script fragment is as follows: >>>>>> def foobar(): >>>>>> print("foobar") >>>>>> >>>>>> >>>>>> If I try this via the jython program, I get the following: >>>>>> >>>>>> >>>>>> bash$ jython >>>>>> Jython 2.2 on java1.5.0_11 >>>>>> Type "copyright", "credits" or "license" for more information. >>>>>>>>> def foobar(): >>>>>> ... print("foobar") >>>>>> ... >>>>>>>>> this_module = __import__(__name__) >>>>>> *>>> print __name__* >>>>>> *__main__* >>>>>>>>> for e in dir(): >>>>>> ... if (callable(getattr(this_module, e))): >>>>>> ... print(e + " is callable") >>>>>> ... >>>>>> *foobar is callable* >>>>>> >>>>>> >>>>>> Notice that the __name__ shows up as __main__ and that foobar shows >>> up >>>>> as >>>>>> callable. So far so good. >>>>>> >>>>>> >>>>>> Now if I try to do the same thing via java: >>>>>> >>>>>> >>>>>> bash$ java Test2 >>>>>> Traceback (innermost last): >>>>>> File "<string>", line 4, in ? >>>>>> *ImportError: no module named main* >>>>>> *Name was main* >>>>>> * >>>>>> * >>>>>> Now why is the __name__ set to main? I even tried hardcoding the >>>>> __import__ >>>>>> to call __import__('__main__'). It couldnt find that module either. >>>>>> Any ideas on how I can get this to work? Any help would be greatly >>>>>> appreciated. >>>>>> >>>>>> >>>>>> Here is the java code: >>>>>> import org.python.util.PythonInterpreter ; >>>>>> import org.python.core.*; >>>>>> >>>>>> >>>>>> public class Test2 { >>>>>> >>>>>> >>>>>> public static void main(String[] args) throws Exception { >>>>>> PythonInterpreter interp = new PythonInterpreter(); >>>>>> interp.setErr(System.err); >>>>>> interp.setOut(System.out); >>>>>> String s = "def foobar():\n" + >>>>>> " print(\"foobar\")\n" + >>>>>> "name=__name__\n" + >>>>>> "this_module = __import__(__name__)\n" + >>>>>> "for e in dir():\n" + >>>>>> " if (callable(getattr(this_module, >>>>> e))):\n" + >>>>>> " print(e + \" is callable\")\n"; >>>>>> >>>>>> >>>>>> try { >>>>>> interp.exec(s); >>>>>> } catch (PyException e) { >>>>>> e.printStackTrace (); >>>>>> } >>>>>> System.out.println("Name was " + interp.get >>> ("name")); >>>>>> } >>>>>> } >>>>>> >>>>>> >>>>>> Thanks a lot in advance and apologies if I missed an FAQ that covers >>>>> this. I >>>>>> did try to do my research before posting this. >>>>>> Thanks >>>>>> Balaji >>>>>> >>>>>> >>>>>> >>>>>> ------------------------------------------------------------ >>> ------------ >>>>>> ------------------------------------------------------------ >>>>> ------------- >>>>>> This SF.net email is sponsored by: Microsoft >>>>>> Defy all challenges. Microsoft(R) Visual Studio 2005. >>>>>> http://clk.atdmt.com/MRT/go /vse0120000070mrt/direct/01/ >>>>>> >>>>>> >>>>>> ------------------------------------------------------------ >>> ------------ >>>>>> _______________________________________________ >>>>>> Jython-users mailing list >>>>>> Jyt...@li... >>>>>> https://lists.sourceforge.net /lists/listinfo/jython-users >>>> >>>> ------------------------------------------------------------ >>> ------------ >>>> ------------------------------------------------------------ >>> ------------- >>> >>>> This SF.net email is sponsored by: Microsoft >>>> Defy all challenges. Microsoft(R) Visual Studio 2005. >>>> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ >>>> >>>> >>>> ------------------------------------------------------------ >>> ------------ >>>> _______________________________________________ >>>> Jython-users mailing list >>>> Jyt...@li... >>>> https://lists.sourceforge.net/lists/listinfo/jython-users >> > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2005. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > > > ------------------------------------------------------------------------ > > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users |