从c ++调用python eval

时间:2013-01-23 15:57:30

标签: c++ python embedding

我基本上试图像下面的问题那样做,但是我在调​​用PyObject_Print时遇到运行时错误抱怨“toupper()0x776e0226”中的错误

Python C API: Using 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函数调用中我错过了什么/做错了什么。请注意,我无法通过python API“直接”调用函数setCurrentFileDir,我必须使用eval。

1 个答案:

答案 0 :(得分:0)

实际上这很好用。但是我在python必须已经构建的目录中有一个.pyd文件(并且eclipse正在向我隐藏),这个文件来自没有定义函数的较旧的python脚本,导致问题。

这是我认为问题可能是.pyd文件的地方。

python NameError: name '<anything>' is not defined (but it is!)