Из-за моего проекта мне нужно загрузить и выполнить код Python из кода C ++.Если вы передаете строку в качестве параметра в коде C ++, вы должны вызвать sqlite в Python и вернуть результат поиска в БД в C ++.
Если вы запускаете здесь только код Python, онработает отлично.Если вы запускаете его в C ++, он возвращает ошибку, что не может найти таблицу в файле БД.
это код Python.
#-*- coding: utf-8 -*-
import sqlite3
def jsonparsing(recog_test, keyword):
db_path = "../test.db"
conn = sqlite3.connect(db_path)
cur = conn.cursor()
sql = "select * from test_table where key=?"
resultdic = {}
for keyword in key_list:
cur.execute(sql, [keyword])
rows = cur.fetchall()
resultdic[rows[0][2]] = rows[0][1]
return str(sttdic)
, и это C ++код.
Retrieval retrieval_obj;
PyObject *pModule;
using json = nlohmann::json;
void Init_PY(){
Py_Initialize();
if (!Py_Initialize){
cout << "Failed Python Initialized" << endl;
PyErr_Print();
Py_Finalize();
exit(1);
}
PyRun_SimpleString("import sys\nsys.path.append('./src/')\n");
pModule = PyImport_ImportModule("pyjson");
if(!pModule){
cout << "Failed Python Module Import..." << endl;
PyErr_Print();
Py_Finalize();
exit(1);
}
}
string parse(const string &recog_text, const string text){
string parse_result;
PyObject *pFunc = PyObject_GetAttrString(pModule, "parsing");
if (pFunc && PyCallable_Check(pFunc)){
PyObject *result = PyObject_CallFunction(pFunc, "ss", recog_text.c_str(), text.c_str());
if (result) {
PyObject *py_str = PyUnicode_AsEncodedString(result, "utf-8", "");
string result_str(PyBytes_AS_STRING(py_str));
parse_result = result_str;
Py_XDECREF(py_str);
Py_XDECREF(result);
}
else{
cout << "Failed Python Running..." << endl;
PyErr_Print();
Py_Finalize();
exit(1);
}
}
else{
cout << "Failed Python Function Calling...." << endl;
PyErr_Print();
Py_Finalize();
exit(1);
}
Py_XDECREF(pFunc);
return parse_result;
}
Мне нужна ваша помощь.Спасибо.