由于我的项目,我需要从C ++代码加载并执行Python代码。如果在C ++代码中将字符串作为参数传递,则必须在Python中调用sqlite并将DB中的搜索结果返回给C ++。
如果您仅在此处运行Python代码,则可以正常运行。如果您使用C ++运行它,它将返回错误,表明它无法在DB文件中找到该表。
这是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;
}
我需要你的帮助。谢谢。