如何将PyObjects转换为C数据类型
How to convert PyObjects to C data types?
我正在做一个项目,我必须将用户输入的C++字符串变量转换为python可执行代码,我使用的是python C API,所以我必须通过将C++字符串转换为C字符串(或字符数组(的中介。一旦我到达那里,我就无法在代码运行后打印值。我正在寻找Python C API中合适的函数。到目前为止,我已经尝试过PyString_AsString(),
、PyBytes_AsString(),
和PyObject_AsUTF8String
。当我尝试用下面的代码运行这些函数时,它们中的每一个都会导致内存问题。我不得不用这三个重新启动我的系统。
Py_Initialize();
//the expected output, the player's output, and the compare functions
//PyObject* expectAnswer; //the expected answer for the level
PyObject* main = PyImport_AddModule("_main_");
PyObject* globalDictionary = PyModule_GetDict(main);
PyObject* localDictionary = PyDict_New();
PyObject* result = PyRun_String(cPlayerString, Py_file_input, globalDictionary, localDictionary);
Py_Finalize();
我想知道我是否只是没有使用正确的电话。const char* PyUnicode_AsData()
看起来很有前景,但我仍然不知道是否需要先将现有内容转换为Unicode。
谢谢你的帮助!
-
您错过了所有的错误检查。几乎每个Python C API调用都有一个返回值,指示是否发生了错误,通常是
NULL
指针。您必须检查这些并在发生错误时进行处理。我善意地假设你为了一个简洁的问题而省略了这个。 -
__main__
;双下划线。 -
可能是您真正的问题:阅读有关启动令牌的文档。
Py_file_input
对字符串求值,就好像它是一个Python文件(即任意长的语句集合(。Python文件不会"返回"任何内容,因此result
可能是None
对象——您可以随时检查它来确认这一点。您的选择是:-
使用令牌
Py_eval_input
,该令牌仅处理单个表达式并返回结果。 -
使用这样一个事实,即语句集合(
Py_file_input
(将更改本地字典-分配给的任何变量之后都将在字典中可用,并且您可以访问这些变量。
-
-
您最终得到的对象(可能(不是字符串,因此对其调用字符串函数可能会使其崩溃(
Py*_Check
函数用于确认类型并避免这种崩溃(。您可能希望在第一个实例中使用泛型PyObject函数。PyObject_Print/Str/Repr
可能就是你想要的。
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- 从 cpp lib 调用函数时的数据类型转换
- 如何将两个 jlong 数据类型转换为 jstring,然后将两个字符串连接在一起以便从 JNI 将字符串返回给 jav
- pybind11:Python 到 C++ 数据类型转换不起作用
- 尝试执行绕道附加,但无法将我的lua函数的数据类型转换为LPVOID
- 使用正确的数据类型转换java中的c++方法逻辑
- XLL由XLW制造,BOOST UBLAS MyMatrix数据类型转换为双**失败
- 将原始数据类型转换为空隙指针类型
- 为什么数据类型转换错误只出现在C++中而不出现在C中
- 正在尝试将time_t数据类型转换为(dd/mm/yyyy)格式C++
- C++中的类到类数据类型转换
- C++ 中的数据类型转换
- 无法从一种数据类型转换为相同的数据类型?
- 内置数据类型转换为用户定义的数据类型c++
- 如何将c数据类型转换为neon数据类型
- 将内置数据类型转换为std::string: memcpy vs snprintf
- c++中的动态数据类型转换
- 如何将Mat数据类型转换为无符号短指针
- 将c++的变量数据类型转换为c#