我有一个 C python 扩展,我想打印出一些诊断信息。
我收到一个字符串作为 PyObject*
。
获取此对象的字符串表示形式以使其可用作 const char *
的规范方法是什么?
原文由 Mark Harrison 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个 C python 扩展,我想打印出一些诊断信息。
我收到一个字符串作为 PyObject*
。
获取此对象的字符串表示形式以使其可用作 const char *
的规范方法是什么?
原文由 Mark Harrison 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您使用的是 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);
}
原文由 Romuald Brunet 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1k 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
Use
PyObject_Repr
(to mimic Python’srepr
function) orPyObject_Str
(to mimicstr
), and then callPyString_AsString
获得char *
(您可以,通常应该将其用作const char*
,例如:此方法适用于任何
PyObject
。如果您绝对确定yourObject
是一个 Python 字符串而不是其他东西,例如数字,您可以跳过第一行并执行以下操作: