#python #c #c
#python #c #c
Вопрос:
Привет, я изучаю, как использовать python на c , и мне интересно, как преобразовать возвращаемое значение python во что-то, что я могу использовать на c .
Вот мой код:
CPyInstance pyInstance;
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append(".")");
CPyObject pName = PyUnicode_FromString("Info");
CPyObject pModule = PyImport_Import(pName);
if (pModule)
{
CPyObject pFunc = PyObject_GetAttrString(pModule, "getTracks");
if (pFunc amp;amp; PyCallable_Check(pFunc))
{
CPyObject pValue = PyObject_CallObject(pFunc, NULL);
//print the returned string
}
else { std::cout << "Error: function getTracks()n"; }
}
else { std::cout << "error: no module imported"; }
return 0;
def getTracks():
returnString = ""
for track in results['tracks'][:10]:
returnString = 'track : ' track['name']
return returnString
Ответ №1:
Вы можете использовать функции из раздела UTF-8 Codecs .
Например, PyUnicode_AsUTF8AndSize:
CPyObject pValue = PyObject_CallObject(pFunc, NULL);
Py_ssize_t size;
const char* data = PyUnicode_AsUTF8AndSize(pValue.getObject(), amp;size);
std::cout << std::string(data, size) << std::endl;
Или PyUnicode_AsUTF8
const char* data = PyUnicode_AsUTF8(pValue.getObject());
std::cout << data << std::endl;
const char* PyUnicode_AsUTF8AndSize(PyObject *unicode, Py_ssize_t *size)
Возвращает указатель на
UTF-8
кодировку Unicodeobject
и сохраняет размер закодированного представления (в байтах)size
.size
Аргумент может бытьNULL
; в этом случае размер не будет сохранен. К возвращаемому буферу всегда добавляется дополнительный нулевой байт (не входит в размер), независимо от того, есть ли какие-либо другие нулевые кодовые точки.Это кэширует представление строки в формате UTF-8 в Юникоде
object
, и последующие вызовы будут возвращать указатель на тот же буфер. Вызывающий объект не несет ответственности за освобождение буфера.[…]
const char* PyUnicode_AsUTF8(PyObject *unicode)
Как
PyUnicode_AsUTF8AndSize()
, но не сохраняет размер.