Вызов python eval из переполнения стека

Я в основном пытаюсь сделать то же, что и следующий вопрос, но я получаю ошибки во время выполнения при вызове PyObject_Print жалуется на ошибку в «toupper () в 0x776e0226»

Python C API: использование PyEval_EvalCode

Мой код:

int callExecFunction(const char* evalStr)
{
PyCodeObject* code = (PyCodeObject*)Py_CompileString(evalStr, "pyscript", Py_eval_input);
PyObject* global_dict = PyModule_GetDict(pModule);
PyObject* local_dict = PyDict_New();
PyObject* obj = PyEval_EvalCode(code, global_dict, local_dict);

PyObject* result = PyObject_Str(obj);
PyObject_Print(result, stdout, 0);
}

evalStr является "setCurrentFileDir()" и pModule был инициализирован ранее из скрипта без ошибок и работал как этот код: http://docs.python.org/2/extending/embedding.html#pure-embedding.

А внутри загруженного модуля есть функция:

def setCurrentFileDir():
print "setCurrentFileDir"return "5"

Что я пропустил / сделал неправильно в вызове функции eval. Обратите внимание, что я не могу вызвать функцию setCurrentFileDir «напрямую» через API Python, я должен использовать eval.

3

Решение

На самом деле это работает нормально. Однако у меня был файл .pyd в каталоге, который Python должен был построить (а eclipse скрывал от меня) из более раннего запуска скрипта Python, в котором не была определена функция, что вызвало проблему.

Здесь я понял, что проблема может быть в .pyd файле.

Python NameError: name ‘<что-нибудь>’не определено (но это так!)

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector