gpt4 book ai didi

Python 嵌入式 C++

转载 作者:行者123 更新时间:2023-11-28 05:10:31 26 4
gpt4 key购买 nike

我读过一些关于 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)

请帮我解决这个问题。这是我第一次将 python 嵌入 c++,请提供一些指导。

再一次,如果可以请给我提供解决方案

***做一些事情从 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;

关于Python 嵌入式 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43601929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com