From: Kenworthy, E. <Edw...@ma...> - 2002-07-22 14:29:50
|
Hi try this: PyObject item; PyObject locvars=interp.getLocals(); for (int i = 0; (item = localvars.__finditem__(i)) != null; i++) { // do stuff with item } It's also faster than using an iterator. -----Original Message----- From: da...@cr... [mailto:da...@cr...] Sent: 22 July 2002 12:37 To: jyt...@li... Subject: [Jython-users] accessing local vars in an embedded interpreter Hi, I'm trying to return a list of all local variables in an embedded jython interpreter to the java side of my code. I have followed up a few old posts on the list, been through the javadoc and come up with the following piece of java ('interp' is a global static PythonInterpreter BTW): /** get a list of all local variable names */ public static Vector getLocalNames(){ Vector ret=new Vector(); PyObject locvars=interp.getLocals(); PyObject iter = locvars.__iter__(); for (PyObject pyobj; (pyobj=iter.__next__())!= null;){ Object obj=pyobj; try{ obj=pyobj.__tojava__(java.lang.Object.class); }catch (Exception ex){} if (obj==Py.NoConversion){ obj=pyobj; } ret.addElement(obj); } return ret; } The for loop construct is borrowed right out of the javdoc on the website. When I try to compile, the compiler barfs at the __iter() and __next__() methods of PyObject. It seems that they are no longer defined for PyObject (did a quick javap) - were they removed recently? (I'm using jython2.1 on JDK1.4, linux) Looking under the hood, I can see that the locals variable in PythonInterpreter is currently a PyStringMap, and from Finn's comments on this list some time back, is likely to stay as either that or a PyDictionary, or something that will have iterative capabilities. So, should I cast my PyObject returned from interp.getLocals() to a PyStringMap and then manipulate that, or what?? Any advice gratefully received. Thanks, Dave ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ Jython-users mailing list Jyt...@li... https://lists.sourceforge.net/lists/listinfo/jython-users |
From: Kenworthy, E. <Edw...@ma...> - 2002-07-23 06:53:44
|
Nope. I meant exactly what I wrote. -----Original Message----- From: Samuele Pedroni [mailto:pe...@in...] Sent: 22 July 2002 15:46 To: da...@cr...; jyt...@li... Subject: Re: [Jython-users] accessing local vars in an embedded interpreter > try this: > > PyObject item; > PyObject locvars=interp.getLocals(); > for (int i = 0; (item = localvars.__finditem__(i)) != null; i++) > { > // do stuff with item > } > You meant PyStringMap locals=(PyStringMap)interp.getLocals(); PyObject keys=locals.keys(); PyObject key; for (int i = 0; (key=keys.__finditem__(i)) !=null ; i++) { // System.out.print(key+" "); // System.out.println(locals.__finditem__(key)); } regards. ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ Jython-users mailing list Jyt...@li... https://lists.sourceforge.net/lists/listinfo/jython-users |
From: Samuele P. <pe...@in...> - 2002-07-22 14:57:34
|
> try this: > > PyObject item; > PyObject locvars=interp.getLocals(); > for (int i = 0; (item = localvars.__finditem__(i)) != null; i++) > { > // do stuff with item > } > You meant PyStringMap locals=(PyStringMap)interp.getLocals(); PyObject keys=locals.keys(); PyObject key; for (int i = 0; (key=keys.__finditem__(i)) !=null ; i++) { // System.out.print(key+" "); // System.out.println(locals.__finditem__(key)); } regards. |
From: Finn B. <bc...@wo...> - 2002-07-22 15:20:14
|
[Samuele Pedroni] > PyStringMap locals=(PyStringMap)interp.getLocals(); > PyObject keys=locals.keys(); To follow the absolute correct use of the jython/java API it should IMO be something like this (untested): PyObject locals = interp.getLocals(); PyObject keys = locals.invoke("keys"); A minor thing really. regards, finn |