我需要编写一个将从CPython和IronPython中使用的模块。检测IronPython的最好方法是什么,因为在这种情况下我需要一个稍微不同的行为?检测IronPython的最佳方法
我注意到sysyplatform在CPython上是“win32”,但在IronPython上是“cli”。
是否有另一种首选/标准的检测方法?
我需要编写一个将从CPython和IronPython中使用的模块。检测IronPython的最好方法是什么,因为在这种情况下我需要一个稍微不同的行为?检测IronPython的最佳方法
我注意到sysyplatform在CPython上是“win32”,但在IronPython上是“cli”。
是否有另一种首选/标准的检测方法?
新的Python 2.6是platform.python_implementation
:
返回一个字符串,标识Python实现。可能的返回值是:'CPython','IronPython','Jython'。
这可能是最干净的方法,而且这是最为标准的方法。然而,我相信Jython仍在运行2.5,所以我不确定你可以依靠这个来检测Jython(但这不是你问题的一部分)。
在当前的IronPython 2.6.1实现中似乎有点破碎:) – Meh 2010-05-08 19:49:25
我可以确认这适用于IronPython 2.7.4。 – 2014-05-13 22:16:03
以下代码将与CPython 2.6和Iron Python 2.6(.NET 2.0)一起使用。 但无法使用Iron Python 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()
理想:
is_ironpython = platform.python_implementation() == "IronPython"
但不幸的是平台模块不能跨Python实现一贯的执行(或根本在某些情况下... *咳嗽* 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
顺便说一句,如果你能发现你正在试图解决的不同运行时的行为,可以被检测到有什么比它绑做一个更好的方法口译员直接。例如,有人可能会分叉IronPython;你的代码不会工作,因为名字“IronPython”会改变。该问题也可能在未来的版本中得到解决,导致您的解决方法中断。 – 2010-05-08 20:49:16
这个问题过时了吗?文档写道,IronPython的'sys.platform'返回类似于CPython的输出https://ironpython-test.readthedocs.io/en/latest/library/sys.html – alvas 2017-04-25 00:50:01