我正在编写一个shell脚本,在检查系统上的python版本后做了一些工作。
我做了一个=`python -V`和$ a的回声:
[root@machine folder]# a=`python -V`
Python 2.3.4
[root@machine folder]# echo $a
和echo $a
只输出
与此同时:
[root@machine folder]# if grep "2.3.4" `python -V` ; then echo "bad" ; fi
Python 2.3.4
我点击后输入它只输出python的版本,但没有别的。
为什么它会像这样?还有其他方法让我做同样的工作吗?
答案 0 :(得分:5)
python -V
似乎在stderr
上输出。如果你运行
a=`python -V`
输出显示在控制台上(即,它没有被子shell分配拾取)。但是,如果您将stderr
重定向到stdout,那么
a=`python -V 2>&1`
作品
答案 1 :(得分:1)
通过sys
实际问Python是否值得?
python -c "import sys; print sys.version_info[0:3]"
(2, 7, 3)
这样就可以检查版本值,而不仅仅是检查版本。
pyver=$(python -c "import sys; print sys.version_info[0:3]")
required="(2, 7, 1)"
echo pyver=$pyver
if [[ "$pyver" > "$required" ]] ; then
echo safe to proceed
else
echo require Python version ">" $required got $pyver
fi
required="(3, 0, 0)"
if [[ "$pyver" > "$required" ]] ; then
echo safe to proceed
else
echo require Python version ">" $required got $pyver
fi
#-- use integer values --
echo Integer version
# Trouble being the output looks odd but allows use of -gt
pyver=$(python -c "import sys; print '%03d%03d%03d' % sys.version_info[0:3]")
required="002007001"
echo pyver=$pyver
if [[ $pyver -gt $required ]] ; then
echo safe to proceed
else
echo require Python version $required got $pyver
fi
required="003000000"
if [[ $pyver -gt $required ]] ; then
echo safe to proceed
else
echo require Python version $required got $pyver
fi
使用Python 2.7.3版在我的系统上输出
pyver=(2, 7, 3)
safe to proceed
require Python version > (3, 0, 0) got (2, 7, 3)
Integer version
pyver=002007003
safe to proceed
require Python version 003000000 got 002007003