Tag: ctypes

我可以用Python访问ImageMagick API吗?

我需要使用ImageMagick作为PIL没有我正在寻找的图像function的数量。 不过,我想用Python。 Python绑定(PythonMagick)自2009年以来一直没有更新。我唯一能够find的是使用命令行界面的os.system调用,但这看起来很笨重。 有没有什么办法直接使用ctypes和某种types的转换来访问API? 作为最后的手段,那里有其他的图书馆有像ImageMagick这样的大量图像编辑工具,我已经看过了?

如何防止C共享库打印在Python的标准输出?

我使用一个python库导入一个打印在标准输出上的C共享库。 我想要一个干净的输出,以便使用pipe道或redirect文件。 打印是在Python之外的共享库中完成的。 一开始,我的做法是: # file: test.py import os from ctypes import * from tempfile import mktemp libc = CDLL("libc.so.6") print # That's here on purpose, otherwise hello word is always printed tempfile = open(mktemp(),'w') savestdout = os.dup(1) os.close(1) if os.dup(tempfile.fileno()) != 1: assert False, "couldn't redirect stdout – dup() error" # let's pretend this […]

为什么printf()在Python中给出一个奇怪的输出?

我试图在Linux的python命令行中使用C函数printf() 。 为了做到这一点,我导入了ctypes 。 我的问题是:如果我创build一个CDLL对象在CDLL中使用printf()函数,我得到一个非常奇怪的输出: >>> import ctypes >>> libc = ctypes.CDLL("libc.so.6") >>> for i in range(10): … libc.printf("%d", i) … 01 11 21 31 41 51 61 71 81 91 >>> 但是,当我在一个函数中调用这个循环时,它按预期工作: >>> import ctypes >>> libc = ctypes.CDLL("libc.so.6") >>> def pr(): … for i in range(10): … libc.printf("%d", i) … libc.printf("\n") … >>> […]

Python:SWIG vs ctypes

在Python中,在什么情况下SWIG比ctypes更好的select共享库中的入口点? 假设您还没有SWIG接口文件。 这两个性能指标是什么?

ctypes – 初学者

我有“包装”到一个Python类的ac库的任务。 这个文件在这个问题上是非常模糊的。 看来他们希望只有高级的python用户才能实现ctypes。 那么我是一个Python初学者,需要帮助。 一些一步一步的帮助将是美好的。 所以我有我的C库。 我该怎么办? 我把什么文件放在哪里? 我如何导入图书馆? 我读过,可能有一种方法来“自动换行”到Python? (顺便说一下,我在python.net上做了ctypes教程,它不起作用。意思是我认为他们假设我应该能够填写其余的步骤。 事实上,这是我得到的代码错误: File "importtest.py", line 1 >>> from ctypes import * SyntaxError: invalid syntax 我真的可以使用一些一步一步的帮助! 谢谢〜

ctypes错误:libdc1394错误:无法初始化libdc1394

我试图编译我的程序到一个共享库,我可以在Python代码中使用ctypes。 库使用这个命令编译好: g++ -shared -Wl,-soname,mylib -O3 -o mylib.so -fPIC [files] `pkg-config –libs –cflags opencv` 但是,当我尝试使用ctypes导入它 from ctypes import * mylib = CDLL("/path/to/mylib.so") print mylib.test() // Expected output: Hello World 我得到以下错误: libdc1394 error: Failed to initialize libdc1394 这是怎么回事?

用Python包装C库:C,Cython还是ctypes?

我想从Python应用程序调用一个C库。 我不想包装整个API,只包含与我的情况相关的函数和数据types。 正如我所看到的,我有三个select: 在C中创build一个实际的扩展模块可能是过度的,我也想避免学习扩展写作的开销。 使用Cython将C库中的相关部分公开给Python。 在Python中完成整个事情,使用ctypes与外部库进行通信。 我不确定2)还是3)是更好的select。 3)的优点是ctypes是标准库的一部分,所产生的代码将是纯Python–尽pipe我不确定这个优点实际上有多大。 这两种select是否有更多的优点/缺点? 你推荐哪种方法? 编辑:谢谢你所有的答案,他们提供了一个很好的资源,任何人想要做类似的事情。 当然,这个决定仍然是针对单个案件的 – 没有人“这是正确的”答案。 对于我自己的情况,我可能会用ctypes,但我也期待在其他项目中尝试Cython。 由于没有一个真正的答案,接受一个有点武断。 我select了FogleBird的答案,因为它提供了对ctypes的一些很好的见解,目前它也是最高票数的答案。 不过,我build议阅读所有的答案,以获得良好的概述。 再次感谢。

Python&Ctypes:将一个结构传递给一个函数,作为取回数据的指针

我已经通过其他的答案看,但似乎无法得到这个工作。 我正在试图调用DLL中的函数来与SMBus设备进行通信。 这个函数需要一个指向结构的指针,该结构有一个数组作为它的一个字段。 所以… 在C: typedef struct _SMB_REQUEST { unsigned char Address; unsigned char Command; unsigned char BlockLength; unsigned char Data[SMB_MAX_DATA_SIZE]; } SMB_REQUEST; 我想我必须设置值,地址,命令和BlockLength,而DLL填充数据数组。 需要此结构的函数将其作为指针 SMBUS_API int SmBusReadByte( SMBUS_HANDLE handle, SMB_REQUEST *request ); 所以我在Python中设置了这样的结构: class SMB_REQUEST(ctypes.Structure): _fields_ = [("Address", c_char), ("Command", c_char), ("BlockLength", c_char), ("Data", type(create_string_buffer(SMB_MAX_DATA_SIZE))] *注意:我也尝试过ctypes.c_char * SMB_MAX_DATA_SIZE作为数据types* 要传递一个指向这个types的结构体的指针,我试图初始化它,如下所示: data = create_string_buffer(SMB_MAX_DATA_SIZE) smb_request = […]

将Numpy数组传递给C函数进行input和输出

哦,我的话我是一个傻瓜。 调用该函数时,我简单地省略了第二个和第三个参数。 像一个傻瓜。 因为这就是我。 原来愚蠢的问题如下: 这似乎是一个非常普通的事情,但是我找不到相关的教程,对于Numpy和ctypes我自己也搞不清楚。 我在文件ctest.c有一个C函数。 #include <stdio.h> void cfun(const void * indatav, int rowcount, int colcount, void * outdatav) { //void cfun(const double * indata, int rowcount, int colcount, double * outdata) { const double * indata = (double *) indatav; double * outdata = (double *) outdatav; int i; puts("Here we go!"); […]

在运行时更改ctypes的LD_LIBRARY_PATH

如何在运行时更新这个环境variables,以便ctypes可以在任何地方加载库? 我已经尝试了以下,似乎都没有工作。 from ctypes import * os.environ['LD_LIBRARY_PATH'] = "/home/starlon/Projects/pyCFA635/lib" os.putenv('LD_LIBRARY_PATH', "/home/starlon/Projects/pyCFA635/lib") lib = CDLL("libevaluator.so")