【问题标题】:bash: do different actions depending on python version installedbash:根据安装的 python 版本执行不同的操作
【发布时间】:2014-01-21 13:12:15
【问题描述】:

我必须根据机器上安装的 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 语句中?

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

a=$(python --version)

...因为它没有为变量a 分配任何东西,它只将版本打印到屏幕上。

【问题讨论】:

  • python --version 输出到STDERR,因此它只将版本打印到屏幕上

标签: python bash shell


【解决方案1】:

您可以将值分配给变量:

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

【讨论】:

    【解决方案2】:

    类似这样的:

    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)
    

    【讨论】:

    • 哦,好吧,这就是我所缺少的。我怎么能自己弄清楚它正在打印到 STDERR?只是通过猜测和尝试?
    • @RickyRobinson 当它没有将输出重定向到变量并打印在屏幕上时,您可以说python --version 2>/dev/null 看看会发生什么。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      • 2013-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多