मैं किसी ऐप में कुछ पायथन कोड एम्बेड करने के लिए boost :: पायथन का उपयोग कर रहा हूं। मैं प्रिंट स्टेटमेंट या अन्य अभिव्यक्तियों का मूल्यांकन करने में सक्षम था, लेकिन जब मैं मॉड्यूल आयात करने का प्रयास करता हूं, तो यह आयात नहीं कर रहा है और एप्लिकेशन बाहर निकल रहा है। इसके अलावा एम्बेडेड कोड में ग्लोबल्स() फ़ंक्शन कॉल रनटाइम त्रुटि भी देता है।मैं बूस्ट :: पायथन एम्बेडेड पायथन कोड में मॉड्यूल कैसे आयात करूं?
#include <boost/python.hpp>
using namespace boost;
using namespace boost::python;
using namespace boost::python::api;
int main(void) {
Py_Initialize();
object main_module = import("__main__");
object main_namespace = main_module.attr("__dict__");
main_namespace["urllib2"] = import("urllib2");
object ignored = exec(
"print 'time'\n", main_namespace);
}
यहाँ, मैं बढ़ावा आयात समारोह का उपयोग कर urllib2 आयात करने के लिए कोशिश की है, इस संकलित और ठीक से चलाता है, लेकिन निम्नलिखित कार्यकारी बयान के साथ, यह एक त्रुटि देता है।
object ignored = exec(
"print urllib2\n"
"print 'time'\n", main_namespace);
या जब मैं बूस्ट आयात फ़ंक्शन को हटाता हूं और एम्बेडेड कोड के भीतर से आयात करता हूं, तो यह एक त्रुटि देता है। मैंने कोशिश करने का प्रयास किया: छोड़कर: ब्लॉक लेकिन यह या तो काम नहीं करता है। क्या ऐसा इसलिए है क्योंकि सी ++ ऐप urllib2 py मॉड्यूल या कुछ का स्थान नहीं ढूंढ पा रहा है? आयात करने की कोशिश करने से पहले मॉड्यूल के पथ को सेट करने का कोई तरीका है?
यह केवल आंतरिक उपयोग के लिए बनाया जा रहा है, इसलिए पथों की कुछ हार्ड कोडिंग स्वीकार्य है।
संपादित करें: अधिक जानकारी:
ऐसा होता है। मैंने कोशिश की .. पकड़ने और PyErr_Print() को कभी भी अपवाद होने पर बुलाया जाता है, और मॉड्यूल आयात या यहां तक कि फ़ंक्शन कॉल होने पर हर बार त्रुटि के रूप में मिलता है। त्रुटि संदेश:
Traceback (most recent call last):
File "<string>", line 1, in <module>
TypeError: 'NoneType' object does not support item assignment
किसी को भी किसी भी कारण के बारे में सोच सकते हैं?
@Jonas खुशी है कि आप अपने काम करने वाले कोड मिला है। आपकी इसके साथ क्या करने की इच्छा है? –
ओह। मैं पूरी तरह से सी ++ सॉकेट पुस्तकालयों से बीमार था। उन्हें समझने के लिए समय चाहिए, और चूंकि मैं कंप्यूटर छात्र नहीं हूं, इसलिए मुझे समझने में अधिक समय लगता है। इसलिए मैंने कुछ ऐसा बनाया जो पीठ में पाइथन urllib2 के साथ एक एसिंक्रोनस urllib ++ की तरह लगता है। : डी मुझे पता है कि यह पागल लगता है। लेकिन अब मेरे पास एक बेहद सुविधाजनक समाधान है! – Sahas
हे, आपके लिए अच्छा है! –