Оценка кода Python из CAPI и получение вывода - PullRequest
3 голосов
/ 22 октября 2011

Я пытаюсь эмулировать code.InteractiveInterpreter из встроенного Python C API.Я использую PyEval_Evalcode для оценки ввода пользователя.Я пытаюсь оценить пользовательский ввод в интерпретаторе и вернуть вывод в виде строки (как интерпретатор будет).Однако PyEval_Evalcode возвращает множество типов данных, заключенных в PyObject*.Есть ли способ сделать то, что я пытаюсь сделать?

Ограничения: Это нужно сделать с помощью API встраивания.Не может быть сделано с помощью PyRun_RunSimpleString() и установкой code.InteractiveInterpreter.

Ответы [ 2 ]

3 голосов
/ 22 октября 2011

Объект, возвращаемый PyEval_Evalcode (), может быть преобразован в строку Python с помощью PyObject_Repr () или PyObject_Str ().Результирующая строка Python может быть превращена в обычную строку C с помощью PyString_AsString ().

0 голосов
/ 27 июня 2012

У меня есть двоичная строка, и я не могу вернуть ее как строку из-за строки, оканчивающейся нулем.

если (PyString_Check (p-значение)) { const char * s = / * PyBytes_AsString * / PyString_AsString (PyObject_Repr (pValue)); // возвращаем шестнадцатеричное представление в ascii int sz = PyString_Size (pValue); // размер действителен const char * s = PyString_AsString (pValue); // возвращать только ниже строки с нулевым символом в конце }

...