C API HowTo ? accessing objects described by dotted string from a (PyObject * )
Martin v. Löwis
martin at v.loewis.de
Thu Dec 18 16:18:12 EST 2003
mhoegeman at ixiacom.com (Mike Hoegeman) writes:
> -- i have a PyObject * that is a instance of an object
> -- i need to access a subobject of that (PyObject *) that is
> described to me as a dotted string, e.g.:
>
>
> "subobject1.listsubobject2[-1].subobject3"
>
> In other words, I need to get
>
> self.subobject1.listsubobject2[0].subobject3
>
> where 'self' is the (PyObject *) I have in my C Program
>
> do i have to parse the string and do the C API getattr calls myself
> or is there some easier way to do it?
You could evaluate the string. As this is relative to an object, you
would first rephrase this as
self.subobject1.listsubobject2[-1].subobject3
Then you build a dictionary where 'self' refers to that object
(PyDict_New, PyDict_SetItemString), then you evaluate the
expression in the context of the dictionary. This, in turn,
is done by invoking Py_CompileString and PyEval_EvalCode.
Notice that executing arbitrary untrusted code is a security risk.
HTH,
Martin
More information about the Python-list
mailing list