Python:如何获取PyObject的字符串表示?
我有一个C语言写的Python扩展,我想打印一些调试信息。
我收到了一个字符串,它是以PyObject*
的形式传递过来的。
请问,获取这个对象的字符串表示的标准方法是什么,这样我就可以把它用作const char *
类型了?
7 个回答
13
如果你想在Python 3中打印一个对象,你可以使用下面的其中一个函数:
static void print_str(PyObject *o)
{
PyObject_Print(o, stdout, Py_PRINT_RAW);
}
static void print_repr(PyObject *o)
{
PyObject_Print(o, stdout, 0);
}
43
如果你在使用Python 3,这里是正确的答案:
static void reprint(PyObject *obj) {
PyObject* repr = PyObject_Repr(obj);
PyObject* str = PyUnicode_AsEncodedString(repr, "utf-8", "~E~");
const char *bytes = PyBytes_AS_STRING(str);
printf("REPR: %s\n", bytes);
Py_XDECREF(repr);
Py_XDECREF(str);
}
59
使用 PyObject_Repr
(这个是用来模仿 Python 的 repr
函数)或者 PyObject_Str
(用来模仿 str
函数),然后再调用 PyString_AsString
来获取 char *
(你可以用它,通常也应该用 const char*
,比如:
PyObject* objectsRepresentation = PyObject_Repr(yourObject);
const char* s = PyString_AsString(objectsRepresentation);
这个方法适用于任何 PyObject
。如果你非常确定 yourObject
是一个 Python 字符串,而不是其他东西,比如数字,你可以跳过第一行,直接这样做:
const char* s = PyString_AsString(yourObject);