日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python转嵌入式c_在C嵌入式python中刷新导入

發(fā)布時間:2023/12/19 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python转嵌入式c_在C嵌入式python中刷新导入 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我有一個用“python.h”嵌入python的C代碼,它工作得很好,沒有任何錯誤,但它并沒有完全按照我的要求來做。在

它的作用:在C代碼開始運行之后,它會忽略我對python文件所做的所有更改,直到我重新啟動C代碼。在

我想要的:在C代碼運行時,如果我對python文件進行了更改,它應(yīng)該開始運行新代碼。在

每次調(diào)用函數(shù)之前,我都嘗試使用函數(shù)PyImport_ReloadModule,但它不起作用。我做錯什么了嗎?在

我的當(dāng)前代碼:#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();

}

總結(jié)

以上是生活随笔為你收集整理的python转嵌入式c_在C嵌入式python中刷新导入的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。