在shell脚本中检测python版本

我想检测是否Python系统安装在Linux系统上,如果是,安装了哪个python版本。

我该怎么做? 有没有比parsing"python --version"的输出更优美的东西?

你可以使用以下几行:

 $ python -c 'import sys; print(sys.version_info[:])' (2, 6, 5, 'final', 0) 

元组logging在这里 。 您可以扩展上面的Python代码,以适合您的要求的方式格式化版本号,或者实际上对其进行检查。

你需要检查$? 在你的脚本来处理python没有find的情况。

PS我使用稍微奇怪的语法来确保与Python 2.x和3.x的兼容性。

 python -c 'import sys; print sys.version_info' 

或者,可读的:

 python -c 'import sys; print(".".join(map(str, sys.version_info[:3])))' 

你也可以使用这个:

 pyv="$(python -V 2>&1)" echo "$pyv" 

你可以在bash中使用这个命令:

 PYV=`python -c "import sys;t='{v[0]}.{v[1]}'.format(v=list(sys.version_info[:2]));sys.stdout.write(t)";` echo $PYV 

如果你想比较shell脚本中的版本,使用sys.hexversion会很有用

 ret=`python -c 'import sys; print("%i" % (sys.hexversion<0x03000000))'` if [ $ret -eq 0 ]; then echo "we require python version <3" else echo "python version is <3" fi 

我使用Jahid的答案,以及从string中提取版本号 ,使纯粹在shell中写入的东西。 它也只返回一个版本号,而不是“Python”。 如果string为空,则Python未安装。

 version=$(python -V 2>&1 | grep -Po '(?<=Python )(.+)') if [[ -z "$version" ]] then echo "No Python!" fi 

假设您想比较版本号以查看是否使用最新版本的Python,请使用以下命令删除版本号中的句点。 然后你可以使用整数运算符来比较版本,比如“我想Python版本大于2.7.0,小于3.0.0”。 参考: http ://tldp.org/LDP/abs/html/parameter-substitution.html中的$ {var // Pattern / Replacement}

 parsedVersion=$(echo "${version//./}") if [[ "$parsedVersion" -lt "300" && "$parsedVersion" -gt "270" ]] then echo "Valid version" else echo "Invalid version" fi 

您可以使用属于标准Python库的平台模块 :

 $ python -c 'import platform; print(platform.python_version())' 2.6.9 

该模块允许您仅打印版本string的一部分:

 $ python -c 'import platform; major, minor, patch = platform.python_version_tuple(); print(major); print(minor); print(patch)' 2 6 9 

要检查是否安装了任何Python(考虑它在PATH上),就像下面这样简单:

 if which python > /dev/null 2>&1; then #Python is installed else #Python is not installed fi 

> /dev/null 2>&1部分就是为了抑制输出。

要获取版本号也:

 if which python > /dev/null 2>&1; then #Python is installed python_version=`python --version 2>&1 | awk '{print $2}'` echo "Python version $python_version is installed." else #Python is not installed echo "No Python executable is found." fi 

安装了Python 3.5的示例输出:“安装了Python 3.5.0版本”。

注意1:如果没有安装Python, awk '{print $2}'部分将不能正常工作,所以或者在上面的示例中使用check,或者按照sohrab T的build议使用grep 。 虽然grep -P使用Perl regexp语法,可能会有一些可移植性问题。

注2: python --versionpython -V可能不适用于2.5之前的Python版本。 在这种情况下使用python -c ...在其他答案中build议。

这里是另一个解决scheme,使用哈希来validation是否安装了python,并提取该版本的前两个主要数字,并比较是否安装了最低版本

 if ! hash python; then echo "python is not installed" exit 1 fi ver=$(python --version 2>&1 | sed 's/.* \([0-9]\).\([0-9]\).*/\1\2/') if [ "$ver" -lt "27" ]; then echo "This script requires python 2.7 or greater" exit 1 fi