나는 C 파이썬 확장을 가지고 있는데, 나는 진단을 출력하고 싶다.Python : PyObject의 문자열 표현을 가져 옵니까?
문자열을 PyObject *로 받고 있습니다.
const char *로 사용할 수 있도록이 객체의 문자열 rep를 얻는 표준 방법은 무엇입니까?
업데이트 :은 const char *로 액세스를 강조합니다.
나는 C 파이썬 확장을 가지고 있는데, 나는 진단을 출력하고 싶다.Python : PyObject의 문자열 표현을 가져 옵니까?
문자열을 PyObject *로 받고 있습니다.
const char *로 사용할 수 있도록이 객체의 문자열 rep를 얻는 표준 방법은 무엇입니까?
업데이트 :은 const char *로 액세스를 강조합니다.
사용 PyObject_Repr
const char*
로 사용, 당신이 할 수있는, 일반적으로해야 (char *
를 얻을 수 PyString_AsString
를 호출 한 후 (str
을 모방하기 위해) 또는 PyObject_Str
(파이썬의 repr
기능을 모방하는), 그리고, 예를 들면 :
PyObject* objectsRepresentation = PyObject_Repr(yourObject);
const char* s = PyString_AsString(objectsRepresentation);
이 방법은 어떤 PyObject
에 대한 확인 당신이 yourObject
이 Pyth 절대적으로 확신합니다. 문자열이 아닌 뭔가 다른, 같은 예를 들어 숫자, 당신은 첫 번째 줄을 건너 뛰고 수행 할 수 있습니다
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);
}
는 PyObject_Repr
가 또는 PyObject_Str
(파이썬의 str
을 모방) (파이썬의 repr
가 모방)보십시오.
문서 :
Compute a string representation of object o. Returns the string representation on success, NULL on failure. This is the equivalent of the Python expression repr(o). Called by the repr() built-in function.
이 외모 : 여기
const char* s = PyString_AsString(yourObject);
–
PyBytes_AS_STRING, PyUnicode_AS_STRING, ... –
Python 3 용 PyBytes_AsString (yourObject)을 사용하려고하고 TypeError가 발생했습니다. 예상 바이트, str을 찾았습니다. –
PyBytes_AsString을 제 답변에 언급하지 않았습니다. 내 대답에서 제안한 것을 시도 했습니까? – piokuc
Py3.x에서 PyString이 PyBytes로 대체되었지만 동일한 기능을 사용하지는 않았습니다. 결국 : PyUnicode_AsUTF8 (objectsRepresentation) –