2016-07-26 3 views
1

내 C++ 코드는 파이썬 인터프리터를 실행하여 외부 파이썬 파일을 읽으며, C API가 파이썬 2와 파이썬 3 문자열을 모두 허용하도록합니다.파이썬 2 및 3과 호환되는 C API를 사용하여 파이썬 str을 추출합니다.

파이썬 2.7.11이면 PyString_CheckPyString_AsString을 사용합니다.

파이썬 3.5.2의 경우, PyUnicode_CheckPyUnicode_AsUTF8String을 사용합니다.

이전 기술은 python 3.x에서 사용되지 않습니다.

후자가 두 버전과 호환 될 것으로 예상했습니다. 그러나 PyUnicode_Checkstr 인수의 경우 파이썬 2에서 false을 반환합니다. 또한 PyUnicode_AsUTF8String은이 경우 세그먼트 오류를 ​​제공합니다.

내가 뭘 잘못하고 있니?

답변

0

나는 마지막으로 파이썬 버전 2.7 (이상) 3.5

PyObject *s; 
if(PyUnicode_Check(py_val)) { // python3 has unicode, but we convert to bytes 
    s = PyUnicode_AsUTF8String(py_val); 
} else if(PyBytes_Check(py_val)) { // python2 has bytes already 
    s = PyObject_Bytes(py_val); 
} else { 
    // Not a string => Error, warning ... 
} 

// If succesfully converted to bytes, then convert to C++ string 
std::string val(""); 
if(s) { 
    val = std::string(PyBytes_AsString(s)); 
    Py_XDECREF(s); 
} 
에서 문자열을 추출하는 방법을 발견