[C++-sig] using extract with embedded boost::python

Simon Pickles sipickles at hotmail.com
Mon Jun 4 15:27:28 CEST 2007

Thanks Stefan.

On consulting libs/python/tests/exec.cpp I got the extract to work, with 
simple data types, like int and std::string.

How can I do the same for a function. I tried:

// C++
python::dict global;
python::object result = python::exec_file("myPython.py", global, global)l

python::object greet = global["greet"];
std::string message = python::extract<std::string>(greet());

def greet(self):
    return "hello, world!"

This gives an error. Its the example from the documentation.

Then, can I also pass parameters?

As for PyErr_Fetch, since I am not using a console application (win32), 
I don't know what to do with PyErr_Fetch or PyErr_Print! Sorry, not big 
on console apps!

Keep up the good work! I'm loving what I see!



Stefan Seefeld wrote:
> Simon Pickles wrote:
>> Sorry, A cut-n-paste error, the code which works is the boost example:
>> object main_module((
>>      handle<>(borrowed(PyImport_AddModule("__main__")))));
>> object main_namespace = main_module.attr("__dict__");
>> handle<> ignored((PyRun_String(
>>     "result = 5 ** 2"
>>     , Py_file_input
>>     , main_namespace.ptr()
>>     , main_namespace.ptr())
>> ));
>> int five_squared = extract<int>(main_namespace["result"]);
> Please have a look at the tests that are part of the boost source distribution.
> Notably, libs/python/tests/exec.cpp contains functionality similar to the above,
> and is shown to work correctly on all tested platforms.
> Also, it would be good to figure out what (python) exception is raised (indicated
> by the exception_already_set in C++). You can query this using PyErr_Fetch().
> (I'm hoping I will get around to wrap that and related functions in boost.python
> in time for boost 1.35.)
> Regards,
> 		Stefan

http://www.simonpickles.com  --- http://www.squirtualreality.com 

More information about the Cplusplus-sig mailing list