在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 --version
或python -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