代码之家  ›  专栏  ›  技术社区  ›  Meh

检测Ironpython的最佳方法

  •  15
  • Meh  · 技术社区  · 16 年前

    我需要编写一个模块,该模块将从cpython和ironpython中使用。检测Ironpython的最佳方法是什么,因为在这种情况下我需要一个稍微不同的行为?

    我注意到sys.platform在cpython上是“win32”,而在Ironpython上是“cli”。

    是否有其他首选/标准的检测方法?

    4 回复  |  直到 9 年前
        1
  •  17
  •   Mark Rushakoff    16 年前

    python 2.6中的新功能是 platform.python_implementation :

    返回标识Python实现的字符串。可能的返回值为:cpython_,ironpython_,jython_。

    这可能是最干净的方法,这差不多是标准的。不过,我相信Jython仍在运行2.5,所以我不确定您是否可以依赖它来检测Jython(但无论如何,这不是您问题的一部分)。

        2
  •  5
  •   Frederic Torres    15 年前

    下面的代码将与CPython2.6和Ironpython2.6(.net 2.0)一起使用。 但是不能与Ironpython2.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
  •  3
  •   NinthTest    12 年前

    理想的:

    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
    
        4
  •  2
  •   LukeN    16 年前

    “cli”(=common-language-infrastructure=.net=ironpython)可能是可靠的。

    据我所知,您可以访问Ironpython中的.NET库,因此您可以尝试导入.NET库,并捕获它在.NET不可用时抛出的异常(如在cpython中)。