有没有办法检测执行代码的解释器是Jython还是CPython?
我有另一篇文章:Jython does not catch Exceptions。对于这种情况,如果我知道解释器是Jython,我可以使用不同的代码。
if JYTHON:
sys.path.insert(0, os.path.dirname(__file__))
from utils import *
else:
from .utils import *
答案 0 :(得分:5)
有正式方法可以做到这一点! :-)请看看
http://docs.python.org/2/library/platform.html#platform.python_implementation
返回标识Python实现的字符串。可能的返回值是:'CPython','IronPython','Jython','PyPy'。
2.6版中的新功能。
之前我不知道。
旧答案:
可能没有标准化的界面,但你可以使用一些有根据的猜测,基于例如sys.executable
(http://docs.python.org/2/library/sys.html#sys.executable)和sys.version
。此外,一些解释器肯定会提供特定于它们的功能,您可以使用它们。
答案 1 :(得分:1)
我不确定这是安全的方式,但我从Find full path of the Python interpreter?得到了一个提示。
使用print sys.executable
,我会得到不同的结果。
context> jython context/context.py
None
context> python context/context.py
/usr/bin/python
因此,检查sys.executable
可能是检查的一种方式。
答案 2 :(得分:0)
可能不是最好的方式,但是为了检测Jython,你难道不能尝试从Java导入一些东西吗?
try:
import java.lang.System
print "Jython!"
except:
print "Not Jython"