有人請向我解釋一下如何將嵌入式Python的變量傳遞給我的C程序? 我在網上隨處看,我發現我不明白,因爲我知道很少的Python。將變量從嵌入式Python傳遞給C
我試圖在C中創建一個回調函數,但我不明白它應該如何工作。
現在,我的主程序在C.我在那裏創建一個Python對象並在一個線程中調用Python腳本中的Python函數。這個函數產生的值和這些值我需要傳回C程序以備後用。
有人請向我解釋一下如何將嵌入式Python的變量傳遞給我的C程序? 我在網上隨處看,我發現我不明白,因爲我知道很少的Python。將變量從嵌入式Python傳遞給C
我試圖在C中創建一個回調函數,但我不明白它應該如何工作。
現在,我的主程序在C.我在那裏創建一個Python對象並在一個線程中調用Python腳本中的Python函數。這個函數產生的值和這些值我需要傳回C程序以備後用。
嵌入,我會建議瞭解一下Python網站上的文檔:https://docs.python.org/3.4/extending/embedding.html#pure-embedding
這是你的興趣的部分是:
if (pModule != NULL) {
pFunc = PyObject_GetAttrString(pModule, argv[2]);
/* pFunc is a new reference */
if (pFunc && PyCallable_Check(pFunc)) {
pArgs = PyTuple_New(argc - 3);
for (i = 0; i < argc - 3; ++i) {
pValue = PyLong_FromLong(atoi(argv[i + 3]));
if (!pValue) {
Py_DECREF(pArgs);
Py_DECREF(pModule);
fprintf(stderr, "Cannot convert argument\n");
return 1;
}
/* pValue reference stolen here: */
PyTuple_SetItem(pArgs, i, pValue);
}
pValue = PyObject_CallObject(pFunc, pArgs);
Py_DECREF(pArgs);
if (pValue != NULL) {
printf("Result of call: %ld\n", PyLong_AsLong(pValue));
Py_DECREF(pValue);
}
else {
Py_DECREF(pFunc);
Py_DECREF(pModule);
PyErr_Print();
fprintf(stderr,"Call failed\n");
return 1;
}
}
else {
if (PyErr_Occurred())
PyErr_Print();
fprintf(stderr, "Cannot find function \"%s\"\n", argv[2]);
}
Py_XDECREF(pFunc);
Py_DECREF(pModule);
}
明確這一行:
pValue = PyObject_CallObject(pFunc, pArgs);
這是調用一個python函數(可調用python對象),pFunc,參數爲pArgs,並返回一個python對象pValue。
我建議閱讀整個頁面以更好地理解嵌入python。另外,既然你說你知道Python很少,我會建議你更熟悉這門語言,以及它與C/C++的區別。在嵌入它之前,您需要更多地瞭解python的工作原理。
編輯: 如果您需要將C/C++代碼和Python代碼之間共享內存(在單獨的線程中運行),我不相信你可以直接共享內存,至少不會在路上你會通常只使用c/C++。但是,您可以創建一個內存映射文件,以達到相同的性能。這樣做將取決於平臺,我沒有這方面的經驗,但這裏有一個鏈接,應該有所幫助:http://www.codeproject.com/Articles/11843/Embedding-Python-in-C-C-Part-II。
基本上,您只需在c中創建mmap(這是平臺相關部分),然後在您的python代碼中爲同一個文件創建一個mmap,然後在每個線程中寫入/讀取文件描述符。
我一直在有效地將Python嵌入到我的程序中,我知道如何獲得返回值。它不是問題。再次,這裏是我最初的問題: http://stackoverflow.com/questions/27940739/embedding-python-in-c-and-continuesly-pass-values-from-a-python-loop-to-the-c -pr 一次函數完成後,我只能返回一個值。我需要的是在Python函數運行時繼續更新值。 – user3030653
啊,我明白了。我已經用更多的信息更新了我的答案。希望有幫助。 –
我不明白你的問題,你能舉一個例子嗎,你已經試過了什麼? –
http://stackoverflow.com/questions/27940739/embedding-python-in-c-and-continuesly-pass-values-from-a-python-loop-to-the-c-pr 這是我的初始問題,但我沒有得到任何答案,只是幾個意見,所以我想Id試圖問一個非常簡單的問題..感謝downvoting。 – user3030653