我有点困惑。我正在尝试进行一些 C++ 和 Python 集成,但这并不简单。我没有使用 Boost,因为我无法让 Boost::Python 正确编译。但那是另一回事了。
目前,这是我在 C++ 中所做的:
//set everything up
PyObject* py_main_module = PyImport_AddModule("__main__");
PyObject* py_global_dict = PyModule_GetDict(py_main_module);
PyObject* py_local_dict = PyDict_New();
PyObject* py_return_value;
PyRun_SimpleString(data.c_str()); //runs Python code, which defines functions
//call a function defined by the python code
py_return_value = PyRun_String("test()", Py_single_input, py_global_dict, py_local_dict);
//attempt to check the type of the returned value
if(py_return_value != NULL) {
//this is the problem: all of these print 0
cout << PyList_Check(py_return_value) << endl;
cout << PySet_Check(py_return_value) << endl;
cout << PyFloat_Check(py_return_value) << endl;
} else {
cout << "IT WAS NULL?!" << endl;
}
Python 程序(作为名为“data”的字符串输入到 C++ 程序):
def test():
derp = 1.234
#derp = [1, 2, 3, 4]
#derp = set([1, 2, 3, 4])
return derp
现在,问题是类型检查不起作用。无论 Python 函数返回的是浮点数、列表还是集合,它们都返回 0。我究竟做错了什么?
如果有人能告诉我为什么对 PyRun_String 的调用会在控制台中打印返回值,则可以加分。这真的很烦人。