草庐IT

python - 使用 ctypes 数组作为 numpy 数组时的 PEP 3118 警告

当我尝试将ctypes数组用作numpy数组时收到以下警告消息:Python2.7.1(r271:86832,Nov272010,18:30:46)[MSCv.150032bit(Intel)]onwin32Type"help","copyright","credits"or"license"formoreinformation.>>>importctypes,numpy>>>TenByteBuffer=ctypes.c_ubyte*10>>>a=TenByteBuffer()>>>b=numpy.ctypeslib.as_array(a)C:\Python27\lib\site-pa

python - ctypes 从 c 函数返回一个字符串

我是Python的老手,但对C的涉猎不多。在互联网上半天没有找到适合我的东西后,我想我应该在这里问一下并获得我需要的帮助。我想做的是编写一个简单的C函数,它接受一个字符串并返回一个不同的字符串。我计划用多种语言(Java、Obj-C、Python等)绑定(bind)此函数,所以我认为它必须是纯C语言?这是我目前所拥有的。请注意,当我尝试在Python中检索值时出现段错误。你好.c#include#include#includeconstchar*hello(char*name){staticchargreeting[100]="Hello,";strcat(greeting,name)

python - 用 ctypes 包装 C++ 库是个坏主意吗?

我在wrappingClibrary上通读了以下两个线程和C++library,我不确定我是否明白了。我正在使用的C++库确实使用了类和模板,但没有以任何过于复杂的方式使用。用ctypes包装它有什么问题或注意事项(除了你可以在纯python等中这样做)?PyCXX、Cython和boost::python是人们提到的其他三个选择,是否有共识哪个更适合C++?谢谢奥利弗 最佳答案 为boost::python辩护,鉴于亚历山大对ctypes的回答:Boostpython在c++和python代码之间提供了一个非常“c++”接口(in

python - 静态库的ctypes?

我正在尝试为poker-eval编写一个Python包装器,一个c静态库。我在ctypes上可以找到的所有文档都表明它适用于共享/动态库。是否有用于静态库的ctypes?我知道cython,但我应该使用它还是将poker-eval重新编译到动态库中以便我可以使用ctypes?谢谢,迈克 最佳答案 选择完全取决于您。如果您有能力将库重新编译为共享对象,我建议您这样做,因为它会最大限度地减少您必须维护的非Python代码。否则,您将需要构建一个链接到静态库并包装它公开的函数的python扩展模块。您提到了Cython;如果你走那条路,这

python - 将一组 NumPy 数组传递给 C 函数以进行输入和输出

假设我们有一个C函数,它接受一组一个或多个输入数组,处理它们,并将其输出写入一组输出数组。签名如下所示(count表示要处理的数组元素的数量):voidcompute(intcount,float**input,float**output)我想通过ctypes从Python调用此函数,并使用它对一组NumPy数组应用转换。对于定义为的单输入/单输出函数voidcompute(intcount,float*input,float*output)以下作品:importctypesimportnumpyfromnumpy.ctypeslibimportndpointerlib=ctypes.

python - 如何将 malloc 和 free 与 python ctypes 一起使用?

我的C库中有一个函数,比如runsim(),它将指向structrepdata的指针作为参数之一,其中structrepdata由给出structrepdata{int*var1;int*var2;int*var3;char*var4;double*var5;double*var6;int*var7;};当专门使用C时,我初始化一个类型为structrepdata的变量来调用该函数,structrepdatadata;voidcreate_data_container(structrepdata*data,intlen_data){data->var1=malloc(sizeof(in

python - 将字符串列表从 Python 传递给 Rust

我已经学习Rust大约两周了,今天,我进入了它的FFI。我使用Python来玩Rust,使用ctypes和libc。我传递了整数、字符串,甚至学会了传递整数列表(thankstothiswonderfulanswer)。然后,我尝试传递一个字符串列表(遵循该答案背后的推理),但我失败了,因为我无法获得线索。在Python中,我有类似这样的东西来传递字符串数组。deftestRust():lib=ctypes.cdll.LoadLibrary(rustLib)list_to_send=['blah','blah','blah','blah']c_array=(ctypes.c_char_

python - 如何将指向c数组的指针转换为python数组

我有一个C++回调函数,它使用ctypes调用Python。这个函数的参数是一个指向double组的指针和元素的数量。有很多元素,大约有2,000,000个。我需要将其发送到scipy函数中。C++原型(prototype)是:bool(*ptsetDataSource)(double*,longlong);这是以下python代码:CPF_setDataSource=CFUNCTYPE(c_bool,POINTER(c_double),c_longlong)CPF_setSelection=CFUNCTYPE(c_bool,c_char_p,c_longlong,c_longlong

python - 使用 ctypes 获取 `time_t` 的类型/大小

我正在使用python访问一个包含一些time_t字段的C结构ctypes模块。鉴于其不完全可移植的特性,我无法将这些字段静态定义为c_int或c_long类型。如何定义它们以使我的代码可移植?示例C结构定义:#import#importtypedefstructmy_struct{time_ttimestap;uint16_tcode;};各自的pythonctypes结构:fromctypesimport*c_time=?#WhatdoIhavetoputhere?classMyStruct(Structure):_fields_=[('timestamp',c_time),('c

python - 使用 ipython 对 dl.open() 的权限被拒绝,但不使用 python

我最初的目标是使用ctypes在Cygwin上打开一个dll文件。但是我发现了一些问题。我挖掘了sys.dl,它仅在IPython上返回未知的Permissiondenied。使用python一切看起来都很好:$lsmy.dll$pythonPython2.7.8(default,Jul282014,01:34:03)[GCC4.8.3]oncygwin>>>importdl>>>dl.open('my.dll')使用ipython我得到错误:$ipythonPython2.7.8(default,Jul282014,01:34:03)In[1]:importdlIn[2]:dl.op