2012-05-02 6 views
7

जिस पुस्तक को मैं पढ़ रहा हूं वह मुझे sys.platform में पाइथन 3 में दिखाता है, विंडोज़ पर यह ठीक चलता है, लेकिन लिनक्स में मैं "लिनक्स 2" वापस आ रहा हूं, भले ही मेरा कर्नेल Linux3 है।पायथन sys.platform = Linux2 लेकिन Linux3 नहीं?

स्टैक ओवरव्लो पर एक खोज करना मैंने लोगों को platform.system और os.name का उल्लेख किया है। इनमें से पहला आपको लिनक्स/विंडोज़ बताएगा लेकिन संस्करण नहीं, और बाद में आपको एनटी/पॉज़िक्स में तकनीकी नाम देता है।

मैं थोड़ी उलझन में हूं कि अनुभव पाइथन कोडर्स द्वारा उपयोग की जाने वाली सबसे सटीक और पसंदीदा विधि है। क्या "windows7" ​​या Linux3 प्राप्त करना संभव है?

बहुत धन्यवाद। पीएस। स्टैक ओवरफ्लो के लिए अभी भी नया, उम्मीद है कि मेरे प्रश्न को सही ढंग से स्वरूपित किया गया है।

+1

बस पाइथन बग रिपोर्ट में आया जो कहता है कि python3.3 इसे हल करके हल करता है 'sys.platform' अब केवल" लिनक्स "की रिपोर्ट करता है और नहीं" लिनक्स 2 "या" लिनक्स 3 "आदि http://bugs.python.org/issue12326 मुझे अभी भी यह जानने में दिलचस्पी है कि कृपया अनुभवी कोडर क्या उपयोग करना पसंद करते हैं । – Zenettii

+0

जिज्ञासा से बाहर, आप किस विचलन का उपयोग कर रहे हैं कि आपके पास लिनक्स 3 कर्नेल है? –

+0

कर्नल 3.3.4 – Zenettii

उत्तर

14

आपको नंबर पर भरोसा नहीं करना चाहिए, क्योंकि, जैसा कि आपने बताया है, यह असंगत है। यह वास्तव में सिस्टम पर कर्नेल का प्रमुख संस्करण दिखाता है जहां पायथन संकलित किया गया था।

इसके अलावा, यह अजगर 3.3 में हटा दिया गया है:

issue 12326: लिनक्स पर, sys.platform अब और मुख्य संस्करण शामिल नहीं है। पाइथन बनाने के लिए उपयोग किए गए लिनक्स संस्करण के आधार पर यह अब 'लिनक्स 2' या 'लिनक्स 3' के बजाय हमेशा 'लिनक्स' है। sys.platform == 'linux2'sys.platform.startswith('linux'), या सीधे sys.platform == 'linux' के साथ बदलें यदि आपको पुराने पायथन संस्करणों का समर्थन करने की आवश्यकता नहीं है।
- What's New In Python 3.3 » Porting Python code

यह भी देखें: sys.platform

तो पता लगाने के लिए पसंदीदा तरीका है, तो सिस्टम लिनक्स sys.platform.startswith('linux') है। यह पायथन और लिनक्स के सभी संस्करणों के लिए काम करता है।

मानक लाइब्रेरी में ऑपरेटिंग सिस्टम नाम को अधिक सटीक रूप से ढूंढने का कोई तरीका प्रतीत नहीं होता है।

+1

। कर्नेल का प्रमुख संस्करण संख्या अप्रासंगिक है और पहले स्थान पर sys.platform में कभी नहीं होना चाहिए था। 'platform.uname() 'में विशिष्ट संस्करण हैं यदि आपको उनकी आवश्यकता है। – gps

0

जांच यहाँ प्रलेखन, यह दोनों बताता है कि क्यों 'linux2' के साथ-साथ कैसे एक पीछे की ओर संगत तरीके से इलाज करने के लिए:

https://docs.python.org/2/library/sys.html

संस्करण 2.7.3 में परिवर्तित: कोड की जांच के बहुत सारे के बाद से sys.platform == 'linux2' के लिए, और लिनक्स 2.x और 3.x, sys.platform के बीच कोई आवश्यक परिवर्तन नहीं है हमेशा लिनक्स 3.x पर भी 'linux2' पर सेट होता है। पायथन 3.3 और बाद में, मान हमेशा 'लिनक्स' पर सेट किया जाएगा, इसलिए इसे हमेशा से शुरू करने के लिए की सिफारिश की जाती है ...

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