मैं एक सी ++ एप्लिकेशन में विभिन्न स्क्रिप्टिंग भाषाओं को एम्बेड करने के साथ प्रयोग कर रहा हूं, वर्तमान में मैं स्टैकलेस पायथन 3.1 की कोशिश कर रहा हूं। मैंने कई ट्यूटोरियल और उदाहरणों की कोशिश की है, जो मुझे कुछ मिल सकता है, एप्लिकेशन से एक साधारण स्क्रिप्ट को चलाने और चलाने के लिए।PyRun_SimpleFile पर पाइथन/सी एपीआई क्रैश क्यों करता है?
Py_Initialize();
FILE* PythonScriptFile = fopen("Python Scripts/Test.py", "r");
if(PythonScriptFile)
{
PyRun_SimpleFile(PythonScriptFile, "Python Scripts/Test.py");
fclose(PythonScriptFile);
}
Py_Finalize();
कुछ अजीब कारण के लिए, पर एक पहुँच उल्लंघन में कोड परिणामों के इस टुकड़े चल:
PyRun_SimpleFile(PythonScriptFile, "Python Scripts/Test.py");
मैं एक ऐसी ही समस्या के साथ दूसरों के लिए ऑनलाइन खोज की है और केवल एक ही मिल गया है। उनका एकमात्र समाधान एक कामकाज था जो पाइथन के पुराने संस्करण में केवल संभव लगता है: एक पायथन फ़ाइल ऑब्जेक्ट बनाना और FILE*
को उस पायथन फ़ाइल ऑब्जेक्ट से PyRun_SimpleFile
में वापस करना। इस तरह की फ़ंक्शन कॉल उपलब्ध नहीं हैं, हालांकि, पायथन 3.1 एपीआई फ़ाइल ऑब्जेक्टर्स से फ़ाइल ऑब्जेक्ट बनाता है और फ़ाइल डिस्क्रिप्टर देता है, लेकिन PyRun_SimpleFile
फ़ंक्शन को अभी भी FILE*
की आवश्यकता होती है।
मुझे फ़ाइल से किसी भी स्क्रिप्ट को चलाने के तरीके के रूप में हानि हो रही है, पूरी फ़ाइल को मैन्युअल रूप से स्मृति में लोड करने और इसे एक विशाल स्ट्रिंग के रूप में चलाने से कम, निश्चित रूप से व्यावहारिक समाधान नहीं है।
क्या देता है? यदि एपीआई में आंतरिक त्रुटि है तो मैं यह कार्य कैसे पूरा कर सकता हूं?
अद्यतन: मैंने स्रोत से स्टैकलेस पायथन 3.1 बनाने में कामयाब रहा है और फिर भी उसी सी रनटाइम लाइब्रेरी का उपयोग करने के बावजूद दुर्घटना पूरी तरह से अपरिवर्तित बनी हुई है। मेरी परियोजना और स्टैकलेस पायथन 3.1 स्रोत दोनों विजुअल स्टूडियो 2010 के सी ++ कंपाइलर और सी रनटाइम के साथ बनाए गए हैं। अब मुझे इस समस्या को हल करने के लिए कोई दिक्कत नहीं है, फ़ाइल नाम का उपयोग करने के लिए पाइथन को संशोधित करने के लिए छोटा और फ़ाइल * नहीं। एक और भयानक कामकाज।
ऐ, मैंने अपने स्वयं के स्टैकलेस पायथन 3.1 लाइब्रेरी का निर्माण नहीं किया। मैं पढ़ता हूं कि समस्या विभिन्न रनटाइम से FILE * s का उपयोग बहुत अच्छी तरह से हो सकती है, इस प्रकार वर्कअराउंड क्यों पाइथन लाइब्रेरी को FILE बनाने की अनुमति देना था और इसे फ़ंक्शन के लिए तर्क के रूप में उपयोग के लिए वापस कर देना था। तो फिर, क्या मेरे पास स्रोत प्राप्त करने और स्टैकलेस पायथन 3.1 बनाने के लिए कोई विकल्प नहीं है? –
यदि आप अपना सी कोड बना सकते हैं, तो आपको स्टैकलेस कोड के साथ कोई कठिनाई नहीं होनी चाहिए। –