2010-11-25 12 views
18

से फ़ाइल जैसी ऑब्जेक्ट का खुलासा करने के लिए मुझे एक सी लाइब्रेरी से फ़ाइल जैसी ऑब्जेक्ट का पर्दाफाश करने की आवश्यकता है जिसे मैं साइथन मॉड्यूल के साथ लपेट रहा हूं। मैं बफरिंग, रीडलाइन() इत्यादि जैसी चीजों के लिए पाइथन के जेनेरिक आईओ कोड का पुन: उपयोग करना चाहता हूं।साइथन

नया आईओ मॉड्यूल सिर्फ वही है जो मुझे चाहिए, लेकिन वास्तव में साइथन से इसका उपयोग करना गैर-तुच्छ लगता है, मैं ' यह विफल रहता है cdef कक्षाएं अन्य cython cdef वर्गों से केवल वारिस कर सकते हैं क्योंकि, जबकि आईओ "कच्चे" है सी

-

  • एक cdef वर्ग कि IO.RawIOBase से विरासत में मेरे कोड: कोशिश की कई aproaches ve

  • मेरा कोड एक सीडीएफ कक्षा में, एक और (गैर-सीडीएफ) वर्ग जो मेरी सीडीएफ कक्षा और रॉयोबेसबेस दोनों को विरासत में लाता है - "टाइपरर: एकाधिक अड्डों के साथ विफल रहता है उदाहरण लेआउट आउट संघर्ष "

  • रॉयियोबेस से प्राप्त एक (गैर-सीडीएफ) वर्ग में मेरा कोड - यह काम करता है, लेकिन मैंने अपने सी-स्तर को स्टोर करने की क्षमता खो दी है (मुझे अंतर्निहित लाइब्रेरी से बात करने की आवश्यकता है) कक्षा के अंदर सामान, इसलिए मुझे इसके चारों ओर एक सीडीएफ रैपर बनाने की ज़रूरत है और इसे एक सदस्य के रूप में स्टोर करें ... यह एक गड़बड़ की तरह दिखता है।

  • सीडीएफ कक्षा में मेरा कोड जो विरासत में नहीं है (रॉ) IOBase इसके कार्यक्षमता को फिर से लागू करता है, पाइथन कोड BufferedReader/BufferedWriter में मेरी वस्तु को लपेटता है - यह एक पिछले काम की तुलना में काम और कम गन्दा लगता है।

मेरे सवालों का (ओं):

1) मैं कुछ याद आ रही है और यहां पहिया पुनर्रचना हूँ?

2) IOBase से सटीक चीजें क्या हैं जिन्हें मुझे Pufthon के वर्तमान और भविष्य के संस्करणों में BufferedReader/Writer को अपने ऑब्जेक्ट से खुश रखने के लिए लागू करने की आवश्यकता है? क्या यह कहीं भी दस्तावेज है?

3) यह पाइथन 2.6 में कैसे काम करेगा जहां आईओ शुद्ध पायथन है? मुझे लगता है कि प्रदर्शन भुगतना होगा लेकिन यह काम करेगा, है ना?

उत्तर

1

अंतर्निहित लाइब्रेरी द्वारा लौटाए गए फ़ाइल डिस्क्रिप्टर नंबर पर os.fdopen() पर कॉल करने के लिए और फिर आपके इनपुट और आउटपुट करने के लिए परिणामी फ़ाइल ऑब्जेक्ट को सामान्य पायथन विधि कॉल भेजने के लिए अक्षम नहीं होगा? अधिकांश I/O के साथ, मुझे आश्चर्य होगा कि क्या आप सीधे सी सी रूटीन कहलाते हैं या पाइथन विधि को आपके लिए लॉजिक कॉल भेज दें - लेकिन, ज़ाहिर है, आप असामान्य स्थिति में हो सकते हैं और मैं गलत हो सकता है!

+0

क्षमा करें, मुझे पहले यह जवाब नहीं मिला था। यह मेरे मामले में वास्तव में लागू नहीं है, जैसा कि मैं तीसरे पक्ष की लाइब्रेरी से प्राप्त कर रहा हूं वह एक ओएस-स्तर एफडी नहीं है। – bdew

संबंधित मुद्दे