पर डेटा वापस कैसे प्राप्त करें सी ++ प्रोजेक्ट पर काम करते समय, मैं किसी तीसरे पक्ष की लाइब्रेरी की तलाश कर रहा था जो मेरा मुख्य व्यवसाय नहीं है। मुझे वास्तव में अच्छी लाइब्रेरी मिली, जो वास्तव में जरूरी है, लेकिन यह पायथन में लिखा गया है। मैंने Boost.Python लाइब्रेरी का उपयोग कर, C++ में पायथन कोड एम्बेड करने के साथ प्रयोग करने का निर्णय लिया। 'MyFunc':सीपीपी में एम्बेडेड पायथन: सीपीपी
import thirdparty
def MyFunc(some_arg):
result = thirdparty.go()
print result
अब समस्या यह है:
#include <string>
#include <iostream>
#include <boost/python.hpp>
using namespace boost::python;
int main(int, char **)
{
Py_Initialize();
try
{
object module((handle<>(borrowed(PyImport_AddModule("__main__")))));
object name_space = module.attr("__dict__");
object ignored = exec("from myModule import MyFunc\n"
"MyFunc(\"some_arg\")\n",
name_space);
std::string res = extract<std::string>(name_space["result"]);
}
catch (error_already_set)
{
PyErr_Print();
}
Py_Finalize();
return 0;
}
एक (बहुत) सरलीकृत अजगर कोड के संस्करण इस प्रकार है:
सी ++ कोड कुछ इस तरह दिखता ठीक निष्पादित करता है, मैं 'परिणाम' का प्रिंट देख सकता हूं। मैं क्या नहीं कर सकता सी ++ कोड से वापस 'परिणाम' पढ़ा जाता है। निकालने का आदेश कभी भी किसी भी नामस्थान में 'परिणाम' नहीं पाता है। मैंने ग्लोबल के रूप में 'परिणाम' को परिभाषित करने का प्रयास किया, मैंने एक टुपल लौटने का भी प्रयास किया, लेकिन मैं इसे काम नहीं कर सकता।
बहुत अधिक व्यापक जवाब का समर्थन नहीं करता एक साथी के माता पिता :) nosklo, मैं सुझाव है कि आप अपने उत्तर को PyRun_String उदाहरण के साथ बढ़ाएं; यह अधिक लचीलापन की अनुमति देता है। – tzot
मुझे लगता है कि आपके 'pArgs = PyTuple_New (0); '1 को 0 पास करना चाहिए। –