python - 脚本 Hashbang : How to get the python 2 interpreter?

标签 python linux shell unix python-2.7

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

不幸的是,一些较新的版本已经开始将这种 flavor 二进制文件称为“python2”而不是“python”。因此,“#!/usr/bin/env python”不能用于寻找正确安装的 python 解释器。要么我得到第 3 版解释器(不好),要么根本没有解释器(更糟!)

是否有一种巧妙的方法来编写 python 脚本,以便在安装时加载 python2 解释器,否则在安装时加载 python 解释器?我必须使用其他机制来检测“python”何时是 python3,但由于那时我处于类似 python 的环境中,所以我可以接受。

我想我可以写一个涟漪发射器,把它叫做“findpython2”,然后用它作为 #!脚本的解释器,但这意味着我必须在搜索路径中安装 findpython2,这显然是次优的(这些脚本通常通过绝对引用调用,因此它们不在路径中。)

最佳答案

从著名的 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"

关于python - 脚本 Hashbang : How to get the python 2 interpreter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12606333/

相关文章:

linux - 维护跨不同执行的 FIFO 可读

linux - 一个 USB 2.0 集线器上的两个网络摄像头 - 在 Windows 中工作但在 Linux 中不工作

linux - (g)awk 似乎会缓存 shell 命令的输出 - 如何避免这种情况?

使用包装器将 shell 脚本转换为 C 代码

python - python中如何获取指定路径下的文件?

python - 如何对数据框行进行分组并过滤字符串列表中的所有事件?

Pythonic 方式迭代序列,一次 4 个项目

Linux命令swapon及其单位

linux - 如何控制 Shell 脚本的输入?

python - 如何选择带有 id 的行 json