bash:根据安装的python版本执行不同的操作

时间:2014-01-21 13:12:15

标签: python bash shell

我必须根据机器上安装的Python版本安装不同的模块。

previous question询问如何执行此操作,但只有结果打印到屏幕上。例如:

$ python -c 'import sys; print sys.version_info'
sys.version_info(major=2, minor=7, micro=3, releaselevel='final', serial=0)

或者更确切地说:

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

在Bash shell上,如何“捕获”上面的打印行,以便我可以将其值合并到 if-statement 中?

编辑:好的,现在我意识到这很简单。我最初陷入困境:

a=$(python --version)

...因为它没有为变量a指定任何内容,所以它只将版本打印到屏幕上。

3 个答案:

答案 0 :(得分:3)

您可以将值分配给变量:

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

请注意=周围没有空格

现在,您可以在if声明中使用它:

if [[ "$pyver" == "2.7.0" ]]; then
    echo "Python 2.7.0 detected"
fi

答案 1 :(得分:1)

这样的事情:

if [[ $(python --version 2>&1) == *2\.7\.3 ]]; then
  echo "Running python 2.7.3";
  # do something here
fi

请注意python --version输出到STDERR,因此您需要将其重定向到STDOUT

为了将其分配给变量,

a=$(python --version 2>&1)

答案 2 :(得分:1)

使用命令替换(``或$()):

if [ $(python ...)  == 2.7.3 ]
then
 ...
fi