python-c-api相关内容

从 C++(或 C)回调调用 python 方法

我正在尝试从 C++ 调用 python 类中的方法.调用 this 的 C++ 方法是 C++ 回调. 在这个方法中,当我尝试调用 python 方法时,它给出了segmentation fault. 我已经在一个全局变量中保存了一个 python 函数的实例,比如 //(pFunc 是 PyObject* 类型的全局变量)pFunc = PyDict_GetItemString( ..
发布时间:2022-01-03 08:40:44 C/C++开发

停止嵌入式 Python

我正在将 Python 解释器嵌入到 C 程序中.然而,在通过 PyRun_SimpleString() 运行某些 python 脚本时,可能会遇到无限循环或执行时间过长的情况.考虑 PyRun_SimpleString("while 1: pass"); 为了防止主程序阻塞,我想我可以在线程中运行解释器. 如何在不杀死整个进程的情况下停止在线程中运行的嵌入式解释器中执行 python 脚本 ..
发布时间:2022-01-02 19:10:54 Python

如何在 C++ 代码中捕获 python 标准输出

我有一个程序,它在运行期间有时需要调用 python 来执行某些任务.我需要一个函数来调用 python 并捕获 python 标准输出并将其放入某个文件中.这是函数的声明 pythonCallBackFunc(const char* pythonInput) 我的问题是捕获给定命令的所有 python 输出 (pythonInput).我没有使用 python API 的经验,我不知道什么 ..
发布时间:2021-12-18 15:35:13 C/C++开发

致命错误:Python.h:没有那个文件或目录

我正在尝试使用 C 扩展文件构建一个共享库,但首先我必须使用以下命令生成输出文件: gcc -Wall utilsmodule.c -o Utilc 执行命令后,我收到此错误消息: >utilsmodule.c:1:20: 致命错误: Python.h: 没有那个文件或目录编译终止. 我已经通过互联网尝试了所有建议的解决方案,但问题仍然存在.我对 Python.h 没有问题.我设法在我的机 ..
发布时间:2021-11-30 23:41:44 Python

如何正确使用 Python 的 C API 和异常?

如果我做类似的事情 >>>x = int(1,2,3,4,5) 我立即收到一个致命错误(如果它是在预先编写的脚本中,则会终止程序执行) 回溯(最近一次调用最后一次):文件“",第 1 行,在 中类型错误:int() 最多接受 2 个参数(给定 5 个) 和 x 保持未定义: >>>X回溯(最近一次调用最后一次):文件“",第 1 行,在 ..
发布时间:2021-11-15 01:16:22 Python

如何打包 Python C 扩展,使其成为普通 Python 模块的子模块?

我写了一个包含两部分的 python 库: Python C 扩展 Python C 扩展的 Python 包装器 我希望能够以这样的方式打包它,即 Python 包装器是顶级模块 foo 而 Python C 扩展是位于 foo._foo.但是,到目前为止,我只能创建两个顶级模块,foo 和 _foo. 我需要在 setup.py 和 init_foo C 函数中做什么来完成 ..
发布时间:2021-06-26 20:29:28 Python

在 C++ 中嵌入 Python 在运行时崩溃

这个问题我已经问了太久了.现在我搜索了这个,它已经工作了一段时间,但是然后它在一个随机的地方坠毁.我认为问题是死锁什么的. 所以请有人告诉我我做错了什么: 我创建了一个全局变量: static int gil_init = 0; 在程序开始时,我调用了 Py_Initialize().这个启动函数在一个会话中被多次调用,但由于 Py_Initialize() 是一个非操作,如果 P ..
发布时间:2021-06-04 20:43:25 C/C++开发

尝试使用gcc构建pybind11项目时获取未定义的引用

我正在尝试使用 Makefile 在GCC上使用GCC在Linux(在我的情况下为Ubuntu 18.04)中构建C ++静态库.我注意到问题不在于makefile本身,而是我尝试使用GCC进行编译和构建的方式.在我对GCC进行更多解释之前,这是我当前的项目层次结构. 该项目仅使用 Pybind11 标头库,该库位于 External_Libraries 目录中. 我的类定义和实现(命 ..
发布时间:2021-05-09 20:30:18 其他开发

如何在C扩展中创建自定义Python异常类型?

我正在用C编写Python模块.我需要报告无法由内置Python异常描述的错误.因此,我希望抛出自己类型的异常.问题在于,Python策略是从BaseException类派生所有异常.我知道如何创建派生类型对象(分配给tp_base成员),但是我不知道如何获取对BaseException类型对象的引用.PyExc_BaseException是对PyObject的引用,表示一个类,而不是类型对象. ..
发布时间:2021-05-06 18:38:18 Python

Python C模块扩展版本不兼容吗?

我在Python 3.6中编译了python c模块扩展.它在Python 3.6环境中运作良好,但在Python 3.7和3.8环境中则无法运作,并且出现错误无法导入名称'cygrpc'. 我想知道这是预期的行为吗?如果是,原因是什么. 解决方案 这取决于扩展的编译方式以及使用的Python C API接口.但是可以, C扩展通常必须针对特定版本的Python进行编译.在不知道如何 ..
发布时间:2021-04-28 18:36:00 Python

Python C Api将PyObject *转移到c数组中

我使用python c api并希望从python返回数组.我从python端返回了一个python数组,并希望将PyObject *结果转移到c数组中,以便我可以使用它. 反正我能做到吗? 侧面问题:在什么情况下试图返回数组中的元素,如 返回arr [3] 会导致PyObject_callobject返回NULL吗? 返回arr 给我一​​些东西 解决方案 在Py ..
发布时间:2021-04-16 20:13:43 C/C++开发

从python返回数组到C ++

我正在编写一个c ++代码来调用python函数,并且从python函数返回的数组将存储在c ++中的数组中.我可以在c ++中调用python函数,但是我只能从Python返回一个值到C ++,而我想返回的是一个数组.下面是我的C ++代码: int main(int argc,char * argv []){我PyObject * pName,* pModule,* pDict,* pFu ..
发布时间:2021-04-09 20:29:02 C/C++开发

无法在我的python C扩展上启动dbg

我使用pyenv中安装的python3.6.1.我在代码上运行gdb时遇到问题.当我运行gdb --args python mycode.py时,它以错误"/home/vydra/.pyenv/shims/python": not in executable format: File format not recognized 结尾 解决方案 正如Jean-FrançoisFabre所建议的 ..
发布时间:2020-11-13 01:52:59 Python

C中是否有任何datetime.tzinfo实现?

我一直在研究使用C扩展模块进行ISO 8601解析的Python库. 其中一部分工作需要创建tzinfo对象,这是迄今为止解析最慢的部分.调用tzinfo(当前为pytz.FixedOffset)的Python实现太慢了. 在Python 3.7中,datetime.timezone最终暴露给C-API.我的代码对此进行了改进,并通过使用C实现而不是Python实现极大地提高了性能.我 ..
发布时间:2020-07-04 22:27:48 Python

如何在C ++代码中捕获Python 3 stdout

在有关如何捕捉的老问题中C ++代码中的python stdout,有一个很好的答案,并且有效-但仅适用于Python 2. 我想在Python 3中使用类似的东西.有人可以在这里帮助我吗? 更新 我正在使用的代码如下.它是从上面引用的Mark答案移植而来的,唯一的变化是使用了PyBytes_AsString而不是PyString_AsString,如 . #include ..
发布时间:2020-07-04 22:26:29 其他开发

嵌入C时发生Python SyntaxError

我有一个python文件,当我对自己的python解释器执行该文件时,该文件运行正常. 我正在尝试使用python C API从C程序调用同一文件: #include #include int main(int argc, char* argv[]){ FILE* fp; Py_SetProgramName(argv[0]) ..
发布时间:2020-07-04 22:25:06 Python

f2py链接Quadmath库?使用ctypes作为fortran包装器?

更新11/23/2019: 最初的问题是,为什么我不能让f2py用于简单的fortran包装器.我的“答案"(如下)是改用ctypes. 原始帖子: 最近三天,我一直在尝试使用f2py将fortran与python接口.我正在使用cygwin和mingw在Windows上工作.这篇文章是关于使用cygwin的,但是我担心两者之间的冲突. 这是源文件multxy.f90: ..
发布时间:2020-07-04 22:24:59 Python