simple? embedding question

sndive at gmail.com sndive at gmail.com
Tue Oct 30 21:02:12 EDT 2007


On Oct 30, 6:47 pm, Farshid Lashkari <n... at spam.com> wrote:
> snd... at gmail.com wrote:
> > i switched to PyImport_ImportModuleEx per your suggestion but i still
> > get
>
> > Traceback (most recent call last):
> >   File "<string>", line 1, in ?
> > NameError: name '__main__' is not defined
>
> > i tried PyRun_SimpleString("__main__.foo.baz()"); :
> > Traceback (most recent call last):
> >   File "<string>", line 1, in ?
> > NameError: name '__main__' is not defined
>
> > i do not have if __name__ == '__main__':
> > statement anywhere in the module i'm importing,
> > but nevertheless i checked that PyImport_AddModule("__main__");
> > and subsequent getdict return non null pointers.
> > does non null dictionary indicate that PyImport_AddModule
> > succeeded as opposed to creating an empty module object?
>
> Sorry, I misunderstood the behavior of the PyImport_ImportModuleEx()
> function. You can use the PyImport_AddModule() function as before, but
> you must explicitly add the module to the __main__ module. Here is some
> code:
>
> PyObject *mainmod = PyImport_AddModule("__main__");
> PyObject *foo = PyImport_ImportModule("foo");
> Py_INCREF(foo); //Increment foo module since PyModule_AddObject() steals
> reference
> PyModule_AddObject(mainmod, "foo", foo);
> PyRun_SimpleString("foo.baz()");
>
> -Farshid

it works!
could i cache maindict pointer in a global var or am i condemned to
call
                PyObject* mainmod = PyImport_AddModule("__main__");
                assert(mainmod);
                PyObject* maindict = PyModule_GetDict(mainmod);
                assert(maindict);
every time i want to PyRun_String?
i call Py_Finalize only atexit.

i also found boost library docs of some help:
http://service-spi.web.cern.ch/service-spi/external/Boost/1.30.0/rh73_gcc32/libs/python/doc/tutorial/doc/using_the_interpreter.html

btw what kind of object is returned in case i use Py_file_input
in PyRun_String?




More information about the Python-list mailing list