Tag: python

python的swig typemap:输入和输出数组

我有一个我想在Python中使用的C函数: extern int convertAtoB( stateStruct *myStruct, const double PointA[3], double PointB[3]); 使用SWIG,我想我需要定义一个类型映射来转换两个点(PointA是输入,PointB是输出),以便Python可以使用它。 在typemaps.i中似乎没有与此一起使用的类型映射,因此我必须定义一个。 我似乎无法在SWIG文档中找到数组的示例。 我想像这样使用这个库: s = externalStruct() point_a = [1, 2, 3] result, point_b = convertAtoB(s, point_a) print point_b “expect [4, 5, 6]” 我该怎么办? 谢谢

在嵌入式Python解释器中打印变量

我编写了一个嵌入Python的小程序。 我正在使用Py_Initialize()和Py_Finalize()正确设置它,并且能够使用PyRun_SimpleString或PyRun_SimpleFile运行脚本。 但是,我不知道在打印变量时如何模仿Python自己的解释器的行为。 特别: a = (1, 2, 3) print a 适合我的工作:打印出来(1,2,3) 然而: a = (1, 2, 3) a 什么都没打印出来。 在Python自己的解释器中,这也会打印出(1,2,3)。 如何让我的代码执行用户期望的操作并打印出值? 提前致谢!

在C中嵌入python,未定义的符号:PyExc_ImportError

我正在尝试为Audacious Media Player编写一个加载python模块的插件。 python嵌入代码来自python-2.6源代码(embed / Demo)。 这用命令行编译, gcc -o demo demo.c -lpython2.6 -lm -L/usr/lib/python2.6/config 我将-lpython2.6 -lm -L/usr/lib/python2.6/config到CC args中。 它加载了一个导入pygtk和gtk模块的Python脚本,这很好用。 但是在我编译插件(共享库)之后发生以下错误(这不是特定于gtk因为我发现,对于任何使用本机库的python模块都是一样的) Traceback (most recent call last): File “”, line 1, in File “./xyz.py”, line 7, in import gtk File “/usr/lib/pymodules/python2.6/gtk-2.0/gtk/__init__.py”, line 30, in import gobject as _gobject File “/usr/lib/pymodules/python2.6/gtk-2.0/gobject/__init__.py”, line 26, in from glib import spawn_async, […]

由于未知类型名称’uint64_t’,Cythonizing失败

这可能是一个新手问题。 我无法cython化一个简单的helloworld.pyx教程脚本,而完全相同的代码适用于linux: print(“hello world”) 这是setup.py脚本: from distutils.core import setup from Cython.Build import cythonize setup(ext_modules = cythonize(‘helloworld.pyx’)) 但是我在运行python setup.py build_ext –inplace后得到了这个: running build_ext building ‘helloworld’ extension creating build creating build/temp.macosx-10.7-x86_64-3.6 gcc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/haotian/anaconda3/include -arch x86_64 -I/Users/haotian/anaconda3/include -arch x86_64 -I/Users/haotian/anaconda3/include/python3.6m -c helloworld.c -o build/temp.macosx-10.7-x86_64-3.6/helloworld.o In file included from helloworld.c:16: […]

使用swig和Anaconda Python找不到Python.h

我正在尝试按照本教程编译一个简单的python / C示例: http://www.swig.org/tutorial.html 我在MacOS上使用Anaconda python。 但是,当我跑 gcc -c example.c example_wrap.c -I/Users/myuser/anaconda/include/ 我明白了: example_wrap.c:130:11: fatal error: ‘Python.h’ file not found # include ^ 似乎在一些问题中报告了这个问题: 尝试编译C扩展模块时缺少Python.h. 缺少Python.h,无法找到 Python.h:没有这样的文件或目录 但似乎没有人提供特定于MacOS上的Anaconda的答案 有谁解决了这个?

比较运算符在Python与C / C ++中的优先级

在C / C ++中,比较运算符(如优先级高于== ,对吧? 所以在C / C ++中,代码将评估为true或1 : if(3<4 == 2<3) { //3<4 == 2<3 will evaluate to true, right? … } 但在Python中,它似乎是错误的: 3<4 == 2<3 #this will evaluate to False in Python. 题 在Python中,每个比较运算符都具有相同的优先级吗?

CTRL + C不会在Python中使用CTYPES中断对共享库的调用

当调用在C共享库(动态库)中执行的循环时,Python将不会收到KeyboardInterrupt,并且没有任何内容会响应(或处理)CTRL + C. 我该怎么办?

我怎样才能从Python C代码断言?

我正在用C编写Python类,我想在我的调试代码中加入断言。 assert.h适合我。 这只会放入调试编译中,因此不会有断言失败影响Python代码的用户*。 我试图划分我的’库’代码(它应该与链接到Python的代码分开),所以我可以从其他C代码中使用它。 因此,我的Python方法是我的纯C代码的简洁包装。 所以我不能在我的’库’代码中执行此操作: if (black == white) { PyErr_SetString(PyExc_RuntimeError, “Remap failed”); } 因为这会使用Python污染我的纯C代码。 它也比简单的更丑陋 assert(black != white); 我相信Distutils编译器总是设置NDEBUG ,这意味着即使在调试版本中我也不能使用assert.h 。 Mac OS和Linux。 救命! *我听过一个论点反对在Python中调用C代码断言。

Python服务器“Aborted(Core dumped)”

我使用web.py来创建Python Web服务器。 调用此服务器以解决线性编程问题,并使用库CBC来执行此操作。 每隔一段时间,服务器就会崩溃一个看起来像这样的日志: 78.243.184.3:56271 – – [03/Jun/2016 04:35:54] “HTTP/1.1 GET /optimization” – 200 OK Aborted (core dumped) 我相信“Aborted(core dumped)”是一个C错误,所以它来自web.py或CBC。 有没有办法追溯错误的来源?

我应该在Python C Extension中将Py_INCREF和Py_DECREF放在哪个块上?

每当我调用我的函数时,每个调用的内存使用量增加大约+ 10M,所以我认为这里有一些内存泄漏。 …. PyObject *pair = PyTuple_New(2), *item = PyList_New(0); PyTuple_SetItem(pair, 0, PyInt_FromLong(v[j])); if(v[j] != DISTANCE_MAX && (p[j] || d[0][j])){ jp=j; while(jp!=istart) { PyList_Append(item, PyInt_FromLong(jp)); jp=p[jp]; } PyList_Append(item, PyInt_FromLong(jp)); PyList_Reverse(item); } PyTuple_SetItem(pair, 1, item); return pair; …. 当我阅读文档时 ,有些电话就像 void bug(PyObject *list) { PyObject *item = PyList_GetItem(list, 0); PyList_SetItem(list, 1, PyInt_FromLong(0L)); PyObject_Print(item, stdout, 0); /* […]