Hi Everyone
I 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():

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__
>>> 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();
                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 {
                } 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.