Python Embedded C++

Python Embedded C++

本文关键字:C++ Embedded Python      更新时间:2023-10-16

我读了几本关于Python嵌入C 的教程。我参考了Python对象。https://docs.python.org/3/c-api/function.html

python脚本:

import picamera 
from pylibdmtx.pylibdmtx import decode 
from time import sleep
import cv2
def test():
    camera = picamera.PiCamera()
    camera.start_preview()
    sleep(10)
    camera.stop_preview()
    camera.capture('image3.png')
    camera.close()
    data = decode(cv2.imread('/home/pi/image3.png'))
    return(data)

C 脚本

#include<Python.h>
#include<string>
int main(){
String data2;
Py_Initialize();
***Doing Some Stuff TO GET data from test() function in python script and store in variable data2
Py_Finalize();
}

我曾经使用pyrun_simplestring((以前可以使用。但是,它不能将变量传递给C 。我想要的结果是它可以将字符串存储到C 的变量。示例C 执行Python脚本,Python函数返回" 1234"。和" 1234"存储在C 变量(data2(

请帮助我解决这个问题。这是我第一次嵌入C 的Python,请提供一些指南。

再次,如果可以在

上为我提供解决方案

***做一些事情以从python脚本中获取test((函数的数据,并存储在可变data2

非常感谢....欣赏

如果我正确理解,则希望您的C 代码调用您的Python test((函数,并将该函数的字符串结果恢复,以便C 代码可以对其进行操作。如果是这样,我认为这样的事情会为您带来困难:

 std::string data;
 char fileName[] = "my_test_python_script.py";
 PyObject * moduleObj = PyImport_ImportModule(filename);
 if (moduleObj)
 {
    char functionName[] = "test";
    PyObject * functionObj = PyObject_GetAttrString(moduleObj, functionName);
    if (functionObj)
    {
       if (PyCallable_Check(functionObj))
       {
          PyObject * argsObject = PyTuple_New(0);
          if (argsObject)
          {
             PyObject * resultObject = PyEval_CallObject(functionObj, argsObject);
             if (resultObject)
             {
                if ((resultObject != Py_None)&&(PyString_Check(resultObject))) 
                {
                    data = PyString_AsString(resultObject);
                }
                Py_DECREF(resultObject);
             }
             else if (PyErr_Occurred()) PyErr_Print();
             Py_DECREF(argsObject);
          }
       }
       Py_DECREF(functionObj);
    }
    else PyErr_Clear();
    Py_DECREF(moduleObj);
 }
 std::cout << "The Python test function returned: " << data << std::endl;