python转嵌入式c_在C嵌入式python中刷新导入
我有一個用“python.h”嵌入python的C代碼,它工作得很好,沒有任何錯誤,但它并沒有完全按照我的要求來做。在
它的作用:在C代碼開始運行之后,它會忽略我對python文件所做的所有更改,直到我重新啟動C代碼。在
我想要的:在C代碼運行時,如果我對python文件進行了更改,它應該開始運行新代碼。在
每次調用函數之前,我都嘗試使用函數PyImport_ReloadModule,但它不起作用。我做錯什么了嗎?在
我的當前代碼:#include "Strategy.h"
#undef _DEBUG /* Link with python24.lib and not python24_d.lib */
#include
#include
#include
using namespace std;
PyObject *pName, *pModule, *pDict, *pFunc;
PyObject *pArgs, *pValue;
void import_py() {
pName = PyString_FromString("main");
pModule = PyImport_Import(pName);
Py_DECREF(pName);
if (pModule == NULL) {
cout << "ERR : Unable to load main.py\n";
return;
} else {
cout << "OK : Loaded main.py\n";
}
if ( PyObject_HasAttrString(pModule, "main") ) {
cout << "OK : main.py has function main\n";
} else {
cout << "ERR : main.py has no function main\n";
return;
}
pFunc = PyObject_GetAttrString(pModule, "main");
if ( pFunc == NULL ) {
cout << "OK : main.py's function main gave NULL when trying to take it\n";
return;
}
}
void remove_py() {
Py_XDECREF(pArgs);
Py_XDECREF(pModule);
Py_XDECREF(pFunc);
Py_Finalize();
}
void Construct() {
Py_Initialize();
import_py();
}
void Destruct() {
if ( pModule || pFunc ) {
remove_py();
}
}
void Loop () {
if ( ! ( pModule && pFunc ) ) {
cout << "Looped. But python values are null\n";
return;
}
cout << "Loop : ";
pArgs = PyTuple_New(2); // Create a tuple to send to python - sends 1,2
PyTuple_SetItem(pArgs, 0, PyInt_FromLong(1));
PyTuple_SetItem(pArgs, 1, PyInt_FromLong(2));
pValue = PyObject_CallObject(pFunc, pArgs);
Py_DECREF(pArgs);
double t = 0; // Get the 2 return values
t = PyFloat_AsDouble(PyTuple_GetItem(pValue, 0));
cout << t << ", ";
t = PyFloat_AsDouble(PyTuple_GetItem(pValue, 1));
cout << t;
cout << "\n";
}
void main() {
Construct();
while(1) { // Using an infinite loop for now - to test
pModule = PyImport_ReloadModule(pModule);
Loop();
}
Destruct();
}
總結
以上是生活随笔為你收集整理的python转嵌入式c_在C嵌入式python中刷新导入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “云栖直播”升级为“公开课”
- 下一篇: Java第一章java语言的概述