将变量从Python传递到C

2024-04-23 17:00:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我在C中嵌入了Python脚本,并在线程中运行。我需要将Python类'Detect Motion'中的变量'a'连续地传递给我的C程序。(不作为返回值) 我知道我可以用fifo或者类似的方法来实现,但是有没有一种方法可以直接把它传递给C,也许是通过调用C函数?在

C:

#include <Python.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>

#include <pthread.h>
pthread_t mythread;
void *ThreadProc();

PyObject *pName, *pModule, *pDict, *pFunc, *pFunc2;

int main(int argc, char *argv[])
{

    py_callback = PyCFunction_New(&callback_descr, NULL);


    char *script = "motion";
    char *functionUse = "get_values";

    Py_Initialize();
    pName = PyString_FromString(script);
    pModule = PyImport_Import(pName);
    // pDict and pFunc are borrowed references 
    pDict = PyModule_GetDict(pModule);
    pFunc = PyDict_GetItemString(pDict, functionUse);

    // POSIX code
    pthread_create( &mythread, NULL, ThreadProc, NULL);

    // Random testing code
    for(int i = 0; i < 10; i++)
    {
        printf("Printed from the main thread.\n");
        sleep(1);
    }

    printf("Main Thread waiting for My Thread to complete...\n");

    // Join and wait for the created thread to complete...
    // POSIX code
    pthread_join(mythread, NULL);

    printf("Main thread finished gracefully.\n");

    return 0;
}

void *ThreadProc()
{
    if (PyCallable_Check(pFunc)) 
    {
        PyObject_CallObject(pFunc, NULL);
    }
    else {
        PyErr_Print();
    }

    // Clean up
    Py_DECREF(pModule);
    Py_DECREF(pName);

    Py_Finalize();
    printf("My thread is finishing...\n");
}

Python:

^{pr2}$

Tags: pyincludecodethreadnullintcharpthread