簡體   English   中英

Python:獲取 PyObject 的字符串表示?

[英]Python: get string representation of PyObject?

我有一個 C python 擴展,我想打印一些診斷信息。

我收到一個字符串作為 PyObject*。

獲取此對象的字符串表示的規范方法是什么,使其可用作 const char *?

更新:澄清強調訪問為 const char *。

使用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);

如果您使用的是 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);
}

如果您只需要在 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);
}

嘗試PyObject_Repr (模仿 Python 的repr )或PyObject_Str (模仿 Python 的str )。

文檔:

計算對象 o 的字符串表示。 成功時返回字符串表示,失敗時返回 NULL。 這相當於 Python 表達式 repr(o)。 由 repr() 內置函數調用。

PyObject *module_name; PyUnicode_AsUTF8(module_name)

對於 python >=3.3:

char* str = PyUnicode_1BYTE_DATA(py_object);

是的,這是一個非常量指針,您可以通過它潛在地修改(不可變)字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM