How do I use python object in C++
Aaron "Castironpi" Brady
castironpi at gmail.com
Wed Sep 24 00:15:36 EDT 2008
On Sep 23, 11:06 pm, "Aaron \"Castironpi\" Brady"
<castiro... at gmail.com> wrote:
> On Sep 23, 9:30 pm, lixinyi... at gmail.com wrote:
>
>
>
> > If the PyObject is a PyList, and all list items are strings,
> > say a=['aaa','bbb','ccc']
>
> > How can I have a
> > myArray[0] = "aaa"
> > myArray[1] = "bbb"
> > myArray[2] = "ccc"
> > in C++?
>
> > Do I have to
> > use PyModule_GetDict() to get the dict first?
> > what about the next?
>
> > > What do you know about the contents of 'argc' and 'argv'? If it's
> > > impossible with Py_Main, can you use one of the other entry points?
>
> > > If you've never manipulated PyObject* objects in C, they can be
> > > hairy. Even if you know 'a' is a sequence, its contents are still all
> > > PyObject*s, which you can access via PyList_... and PySequence_
> > > functions.
>
> This one writes '[aaa, bbb, ccc]' to the console in two different
> ways.
>
> #include <Python.h>
>
> int main() {
> PyObject *list, *listrepr;
> Py_Initialize();
>
> /* first */
> list= PyList_New( 3 );
> PyList_SetItem( list, 0, PyString_FromString( "aaa" ) );
> PyList_SetItem( list, 1, PyString_FromString( "bbb" ) );
> PyList_SetItem( list, 2, PyString_FromString( "ccc" ) );
>
> listrepr= PyObject_Repr( list );
> printf( "%s\n", PyString_AsString( listrepr ) );
>
> Py_DECREF( listrepr );
> Py_DECREF( list );
>
> /* second */
> list= Py_BuildValue( "[sss]", "aaa", "bbb", "ccc" );
> listrepr= PyObject_Repr( list );
> printf( "%s\n", PyString_AsString( listrepr ) );
>
> Py_DECREF( listrepr );
> Py_DECREF( list );
>
> Py_Finalize();
> return 0;
>
> }
>
> Did you want to execute some Python code, and examine variables it
> creates?
Here's a third way:
PyObject *list, *listrepr, *dict, *result, *name;
/* third */
dict= PyDict_New( );
result= PyRun_String( "myarray= [ 'ggg', 'hhh', 'iii' ]",
Py_file_input, dict, NULL );
name= PyString_FromString( "myarray" );
list= PyDict_GetItem( dict, name );
listrepr= PyObject_Repr( list );
printf( "%s\n", PyString_AsString( listrepr ) );
Py_DECREF( dict );
Py_DECREF( result );
Py_DECREF( name );
Py_DECREF( listrepr );
Py_DECREF( list );
PyRun_String runs a namespace, 'dict', which holds the variables.
More information about the Python-list
mailing list