Python SystemError when using the C API PyRun_String
Python SystemError when using the C API PyRun_String
我试图在C 程序中运行一些python文件,这些文件实际上包含在c 代码中,为 std::string
称为 command
。
我已经成功使用了PyRun_SimpleString(command.c_str())
,但是这可以防止获得异常信息。
我现在尝试以下内容:
PyObject* result = PyRun_String(command.c_str(), Py_file_input, PyEval_GetGlobals(), PyEval_GetLocals());
但是,这引发了:
SystemError: frame does not exist
我在做什么错?
更新:
我尝试使用以下内容将过程分为编译 评估:
PyObject* code = Py_CompileString(command.c_str(), filename.c_str(), Py_file_input);
PyObject* result = PyEval_EvalCode(code, PyEval_GetGlobals(), PyEval_GetLocals());
现在,错误是不同的:
SystemError: PyEval_EvalCodeEx: NULL globals
这可能更具解释性,正如它在C API doc ::
中所说的那样返回当前执行框架中全局变量的字典,或者如果当前没有框架执行。
我不确定我知道什么是框架。
我找到了一个解决方案。我可能何时不了解框架是否正在出口,但事实证明,在启动解释器后,没有帧正在运行。这就是为什么PyEval_GetGlobals()
和PyEval_GetLocals()
返回NULL
并在以后引起错误的原因。
相反,默认模块__main__
的命名空间应用作全球和当地人名称空间:
PyObject* d = PyModule_GetDict(PyImport_AddModule("__main__"));
PyObject* result = PyRun_String(command.c_str(), Py_file_input, d, d);
Py_DECREF(result);
相关文章:
- 用于访问容器<T>数据成员的正确 API
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++MySQL C api用户输入行
- 如何使用 AWS Transcribe C++ API 中的'StartTranscriptionJobRequest'?
- 将std::string传递给WriteConsole API
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 在gtest.中使用fff.h模拟系统API
- 有没有任务栏API可以立即应用注册表更改
- C++win32 API创建多个类似视口的窗口
- 使用libcurl提交批量url的正确BING Api POST url是什么
- 如何将真正的字符串从python c-api转换为python脚本
- 使用Qt框架在c ++类中创建API调用
- Libreoffice API (UNO):需要更改用户的 xTextField 文本
- 使用 WIN32 API (C/C++) 对特定树视图项进行着色
- 使用 Python Extension API 包装复杂C++类
- 如何使用 samtools C API 构建一个简单的主.cpp文件
- 第三方 API 中的编译错误 - Visual Studio
- Tensorflow c++ api undefined reference to 'tflite::D efaultErrorReporter()'
- clang 的 libFuzzer 可以在同一二进制文件中测试超过 1 个 API 吗?
- Issues with Win32 ReadProcessMemory API