2

システム上の python のバージョンを確認した後、いくつかの作業を行うシェル スクリプトを作成しています。

a=`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

Enterキーを押した後、Pythonのバージョンを出力するだけで、他には何も出力しません。

なぜこのように振る舞うのですか?同じタスクを実行する他の方法はありますか?

4

2 に答える 2

7

python -Vに出力されるようstderrです。あなたが実行する場合

a=`python -V` 

出力はコンソールに表示されます (つまり、サブシェルの割り当てによって取得されていません)。stderrただし、 stdout にリダイレクトすると、

a=`python -V 2>&1` 

作品

于 2013-02-06T17:40:52.287 に答える
1

実際にPythonに尋ねる価値はありsysますか?

 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
于 2013-02-07T09:38:07.067 に答える