检查脚本中是否存在python3

检查脚本中是否存在python3,python,python-3.x,Python,Python 3.x,在python中,脚本的第一行应该是 #!/usr/bin/env/python{3} 有没有办法做到: if python: #!/usr/bin/env/python else: #!/usr/bin/env/python3 编辑: 在RHEL7中运行python,将显示python-2.7.5(默认) 只有运行python3才能在我的RHEL7上执行python3-3.6.8。这些都不正确。正确的命令是/usr/bin/env,它的参数在空格后是您希望它查找的实际解释器

在python中,脚本的第一行应该是

#!/usr/bin/env/python{3}
有没有办法做到:

if python:
    #!/usr/bin/env/python
else:
    #!/usr/bin/env/python3
编辑:

在RHEL7中运行
python
,将显示python-2.7.5(默认)


只有运行
python3
才能在我的RHEL7上执行python3-3.6.8。

这些都不正确。正确的命令是
/usr/bin/env
,它的参数在空格后是您希望它查找的实际解释器的名称

你的问题有点像是“海龟一路下来”的问题。您必须知道要运行的命令。当然,您可以创建另一个工具,并将其称为类似于
py3orpy
的工具,但是在您尝试请求
env
查找它之前,您需要知道
路径中存在的工具


我希望我们最终会在python上趋同;如果您不能依赖于此,那么可能最不容易出错的解决方案是在安装时找出目标系统的正确选项,并让安装程序编写正确的shebang。或者只要安装一个符号链接
/usr/local/bin/python3
(如果它还不存在),然后安装硬代码
#/usr/bin/env python3
无处不在。

我不能说我推荐这个,但它确实有效:

#!/bin/bash

_=""""
if [[ -x '/usr/bin/python3' ]]
then
    exec /usr/bin/python3 "$0" "$@"
elif [[ -x '/usr/bin/python' ]]
then
    exec /usr/bin/python "$0" "$@"
else
    echo "No python available"
    exit 1
fi
"""

import sys
sys.stdout.write("you made it\n")
无法从_ufuture _u导入print_函数执行
,因为它必须是python的第一行


这里的原则是使用
bash
来检测可执行文件,但也要使其成为有效的python,这样您就可以在同一个文件上使用python解释器重新执行。

在python中
是什么意思脚本的第一行应该是#/usr/bin/env/python{3}
?就我而言,没有什么是这样的。@IsmailHafeez,表示它是
python
脚本,而不是
Perl
one或
shell
one。@Igor python脚本的第一行不应该是这样的。这不是python的东西。这只是一个
bash
/任何其他unixshell东西。它告诉shell要使用什么解释器,称为a(hash
bang
)。这只适用于unix/linux/等系统,与python毫无关系。@RocketHazmat,但我的问题不是这个。它是关于在
python
python3
之间动态切换的,在这两种情况下,人们必须在两种不同的环境中同时使用这两种语言。@Igor您可能应该使用类似python2和python3的库来实现兼容性。请参阅:我们正在RHEL7下工作,很快将转到RHEL8,其中python3是默认值。然而,我们也在VM下工作,而python3还不可用。有没有一种方法可以动态确定应该运行什么?如果您控制环境,当然可以。如果您可以强制每个VM都有
python3
,那么您就有了它。@Igor您可能应该使用类似的库来实现python2和python3之间的兼容性。@tripleee,我希望如此。但这不取决于我。我可以修复我的虚拟机,但不能修复生成的虚拟机。此外,我们必须保持兼容性。@RocketHazmat,不是,这两种情况都不同-请参见编辑操作。