python - Ctypes中的TA-Lib,帮助调用函数

标签 python c ctypes

所以在过去的三天里我一直在试图找出 TA-Lib使用Python。这是我编译成 dylib(.so 的 mac 版本)的源代码,并从编码如下的 python 脚本中调用它:

from ctypes import *
import numpy

c_float_p = POINTER(c_float)
data = numpy.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20])
data = data.astype(numpy.float32)
data_p = data.ctypes.data_as(c_float_p)


dylib = CDLL('libta_lib.dylib')


value = dylib.TA_S_SMA(c_int(0), c_int(data.size - 1), data_p, 0, 19, data_p)

无论数组值是什么,打印值都会返回 2。我无法将 TA_S_SMA 的第四个参数从 0 或 1 更改,否则我会收到 python 138 错误,然后出现 python 崩溃。谁能向我解释调用这个函数的正确方法?我的 C 技能有限(读为 0)。

有用的链接:

谢谢!

最佳答案

几周前我遇到了同样的问题,我发现了这些instructions 。现在他们不使用 ctypes,但我认为它效果更好。 SWIG 将为您完成所有包装工作。有几点需要注意。当您到达 Single: Multi: 部分时,如果您不知道哪个,请从 Multi 开始,如果不起作用,请转到 Single。再往下看,您会看到他正在将 Python 2.3 替换为 Python 2.6。我使用的是 python 2.7,只是用 2.7 替换了 2.6,它就工作了。我不确定这是否适用于更高版本的 python,但如果这就是你正在使用的,那么值得一试。希望对您有所帮助。

关于python - Ctypes中的TA-Lib,帮助调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9050519/

相关文章:

python - 二进制列表通过了解其在 python 中的长度来包含所有可能的选项

c - C中的合并链表

c - redisAsyncCommand 中 privdata 参数的用途是什么?

python - 如何从原始(二进制)ctype 缓冲区构建 python 字符串?

python - 返回带字符的字符串 - 其中数字彼此跟随

python - 使用boto3 python计算s3中csv文件的行数

c - 关于linux中匿名映射内存的问题

python - 如何将 bytearray 的一部分复制到 c_void_p 引用的内存,反之亦然?

python-3.x - python3 ctype CreateWindowEx 简单示例

python - Django:通过评估日期是否为空来排序