2010-05-08 11 views
15

मुझे एक मॉड्यूल लिखने की आवश्यकता है जिसका उपयोग सीपीथॉन और आयरनपीथन दोनों से किया जाएगा। आयरनपीथन का पता लगाने का सबसे अच्छा तरीका क्या है, क्योंकि मुझे उस मामले में थोड़ा अलग व्यवहार चाहिए?आयरनपीथन का पता लगाने का सबसे अच्छा तरीका

मैंने देखा कि sys.platform CPython पर "win32" है, लेकिन आयरनपीथन पर "क्ली" है।

क्या इसका पता लगाने का एक और पसंदीदा/मानक तरीका है?

+1

एक के रूप में, यदि आप भिन्न क्रम व्यवहार जो आप के आसपास काम करने के लिए कोशिश कर रहे हैं पता लगा सकते हैं, कि करने के लिए इसे बांधने से क्या करना है का पता लगाने का एक बेहतर साधन हो सकते हैं:

मैं इस का उपयोग सीधे दुभाषिया। उदाहरण के लिए, कोई फोर्क आयरनपीथन कर सकता है; आपका कोड काम नहीं करेगा क्योंकि "आयरनपीथन" नाम बदल जाएगा। इस मुद्दे को भविष्य के संस्करण में भी ठीक किया जा सकता है, जिससे आपके कामकाज को तोड़ने का कारण बनता है। –

+0

क्या यह मुद्दा पुराना है? दस्तावेज़ लिखते हैं कि आयरनपीथन का 'sys.platform' सीपीथॉन https://ironpython-test.readthedocs.io/en/latest/library/sys.html – alvas

उत्तर

17

न्यू अजगर 2.6 में platform.python_implementation है:

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

शायद यह करने का सबसे साफ तरीका है, और यह जितना मानक हो उतना मानक है। हालांकि, मेरा मानना ​​है कि ज्योथन अभी भी 2.5 चल रहा है, इसलिए मुझे यकीन नहीं है कि आप अभी तक ज्योथन का पता लगाने के लिए इस पर भरोसा कर सकते हैं (लेकिन यह आपके प्रश्न का हिस्सा नहीं था)।

+2

वर्तमान आयरनपीथन 2.6.1 कार्यान्वयन में थोड़ा टूटा हुआ प्रतीत होता है :) – Meh

+0

मैं आयरनपीथन 2.7.4 के साथ इस काम की पुष्टि कर सकता हूं। –

2

"क्ली" (= सामान्य भाषा इंफ्रास्ट्रक्चर = .NET = IronPython) शायद विश्वसनीय है।

जहां तक ​​मुझे पता है, आप आयरनपीथन के भीतर .NET पुस्तकालयों तक पहुंच सकते हैं, ताकि आप .NET लाइब्रेरी आयात करने का प्रयास कर सकें और .NET उपलब्ध नहीं होने पर अपवाद को पकड़ सकें (जैसा कि सीपीथन में है)।

+0

के समान उत्पादन देता है, मैंने हमेशा सोचा था कि सीएलआई कमांड लाइन इंटरफ़ेस था। शब्दकोष वास्तव में बाहर चल रहे हैं: http://www.dilbert.com/fast/1993-06-23/। – extraneon

+0

इसका मतलब यह है कि दोनों! – LukeN

5

निम्न कोड CPython 2.6 और आयरन पायथन 2.6 (.NET 2.0) के साथ काम करेगा। लेकिन आयरन पायथन 2.6 (.NET 4.0) के साथ काम नहीं करेगा, संस्करण संख्या को पार्स करने के लिए platform.py के साथ कुछ समस्या है। मैंने Python.org पर एक दोष प्रस्तुत किया। फिक्सिंग platform.py मुश्किल नहीं है।

import sys 
import platform 

def IsIronPython(): 
    return platform.python_implementation().lower().find("ironpython")!=-1 

print IsIronPython() 
3
आदर्श रूप में

:

is_ironpython = platform.python_implementation() == "IronPython" 

लेकिन दुर्भाग्य से मंच मॉड्यूल नहीं अजगर कार्यान्वयन में समान रूप से लागू किया गया है (या बिल्कुल कुछ मामलों में ... * खांसी * Jython * खांसी *)। एक तरफ

if hasattr(platform, "python_implementation"): 
    is_ironpython = "ironpython" in platform.python_implementation.lower() 
else: 
    try: 
     import clr 
    except ImportError: 
     is_ironpython = False 
    else: 
     is_ironpython = True