脚本Hashbang:如何获得python 2解释器?

Jon*_*tte 3 python unix linux shell python-2.7

我正在编写必须在许多不同类UNIX上运行的脚本.这些是用python 2.x编写的.

不幸的是,一些较新的版本已经采用调用这种风格二进制文件"python2"而不是"python".因此,"#!/ usr/bin/env python"无法查找正确安装的python解释器.要么我得到版本3解释器(坏)或根本没有解释器(更糟!)

是否有一种聪明的方法来编写python脚本,如果安装了它将加载python2解释器,否则python解释器是否已安装?我必须使用其他机制来检测"python"何时是python3,但是当我在那个类似python的环境中时,我可以忍受它.

我想我可以写一个涟漪发射器,称之为"findpython2",并将其用作#!脚本的解释器,但这意味着我必须在搜索路径中安装findpython2,这绝对是次优的(这些脚本通常由绝对引用调用,因此它们不在路径中.)

nin*_*alj 6

从着名的perl hashbang技巧中获取灵感,我想出了这个:

#!/bin/sh
"""":
python2 -c "" 2>/dev/null && exec python2 $0 ${1+"$@"}
python  -c "" 2>/dev/null && exec python  $0 ${1+"$@"}
echo "Could not find a python interpreter."
exit 1
"""

print "hello python"
Run Code Online (Sandbox Code Playgroud)