首页 文章

如何从python对象中检索值?

提问于
浏览
0

我已经尝试使用python对象与python进行通信..在c方面我将值存储到指针变量..当我返回它时,我在python方面得到一个python对象..是否有可能检索“那些来自python对象的指针值“在python端?

test.c文件

#include <stdio.h>
#include <stdlib.h>


    int *getval() {
        int  *var;
        int *var1;
        int i;
        var1=var;
        *var=5;
        var++;
        *var=6;
        return var1;
    }

test1.c file

    #include <Python.h>

        static PyObject * getvals(PyObject * self, PyObject * args)
        {
            int *x;
            x=getval();
            PyObject * test = PyCapsule_New((int *)x, "int", NULL);
            return test;

        }


python file

    import test1
    x=test1.getvals()

something like this .. I want to get the values of the var file I have assigned in test.c in python file.

我已修改为此请检查我如何在python方面检索值

test.c
uint64_t * getvar()
{
    int i=0;
    uint64_t * vars=(uint64_t *)malloc(sizeof(uint64_t));

        for(i=0;i<3;i++)
        {
            var[i]=i;
            printf("%llu\n",var[i]);
        }
    return vars;
}
test1.c
static PyObject * getlist(PyObject * self, PyObject * args)
{
    int i;
    uint64_t *  mylist;
    mylist=getvar();
    for(i=0;i<3;i++)
        printf("%llu\n",mylist[i]);
    PyObject * my_list = PyCapsule_New((void *)my_list, "uint64_t", NULL);
    return my_list;
}
test.py

import test1
x=test.getvals()
print x

在编译c文件时,我得到了这样的警告

格式'%llu'需要'long long unsigned int'类型的参数,但参数2的类型为'uint64_t'[-Wformat]警告:'vars'可能在此函数中未初始化使用[-Wuninitialized]

但仍然打印出值,我怎样才能初始化'变量'?以及如何在test.py中检索test.c中分配的值

请建议..

1 回答

  • 2

    你的代码被严重破坏了 . 您的 getval 函数将数据存储在内存中的随机位置 . 这可能会腐败,并可能最终导致程序崩溃 .

    *var=5;
    

    为此, var 需要指向某事 . 但是var并没有指向任何东西,因为你从未设置它 .

    我猜你会知道python并且只是从C开始 . 我建议你在尝试使用python和c之前先学习一段时间 . 你的C代码显示你对C的工作方式非常困惑,并且在解决之前它将很难使用Python / C api .

相关问题