相关疑难解决方法(0)

在Python中调用C函数

我有一堆用C编写的函数,我想要一些用Python编写的代码来访问这些函数.

我在这里已经阅读了几个处理类似问题的问题(例如这里这里),但我对我需要采取哪种方法感到困惑.

一个问题推荐ctypes,另一个推荐cython.我已经阅读了两篇文档,我完全不清楚哪一个对我有用.

基本上我已经写了一些python代码来做一些二维FFT,我希望C代码能够看到那个结果然后通过我编写的各种C函数来处理它.我不知道我是否更容易从C调用Python,反之亦然.

c python ctypes cython

30
推荐指数
3
解决办法
4万
查看次数

提取浮点/双精度值

如何使用正则表达式从字符串中提取double值.

import re

pattr = re.compile(???)    
x = pattr.match("4.5")      
Run Code Online (Sandbox Code Playgroud)

python regex

28
推荐指数
3
解决办法
3万
查看次数

从Python调用的C函数发出返回值

看似简单的问题我有困难.我需要从Python代码调用各种C函数.目前,我正试图通过ctypes来做到这一点.我遇到了一个简单的示例实现问题,我正在使用它来确保在更改大块现有代码之前一切都按预期工作.C函数采用一些参数,进行各种数学计算,然后返回一个double值.这是我用作测试的C文件.

#include "Python.h"

double eval(double* args, int length, double* rands, int randLength, int debug)
{
    double val1 = args[0];
    double val2 = rands[0];
    double ret = val1 + val2;
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

在我的实际测试功能中,我打印val1val2以确保它们正在接收值.一切都很好.调用此函数的Python如下所示.

test = ctypes.CDLL("/home/mjjoyce/Dev/C2M2L/AquaticWavesModel.so")
rand = Random();

args = [2]
argsArr = (ctypes.c_double * len(args))()
argsArr[:] = args

argsRand = [rand.random()]
argsRandArr = (ctypes.c_double * len(argsRand))()
rgsRandArr[:] = argsRand

result = test.eval(argsArr, len(argsArr), argsRandArr, len(argsRandArr), 0)
print "result", result
Run Code Online (Sandbox Code Playgroud)

当打印返回的结果时,它通常会转储一个大的负数.这是我的假设,我需要在Python处理该值之前进行一些转换,但是我无法找到适合我生活的答案.我一直在搜索,但我不确定我是否错过了明显的信息,或者搜索错误的信息.

此外,如果我将函数的返回类型更改为int,则计算结果正确并返回int并按预期打印.如果我将它设置为double,则C代码中的计算是正确的(我打印它们进行检查),但Python不喜欢返回的结果.

我缺少什么想法?

python ctypes

9
推荐指数
1
解决办法
7167
查看次数

标签 统计

python ×3

ctypes ×2

c ×1

cython ×1

regex ×1