簡體   English   中英

Python嵌入式C ++

[英]Python Embedded C++

我讀過一些有關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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM