16

2 台の異なるコンピューターで Python スクリプトを実行しようとすると問題が発生します。各コンピューターで python バージョン 2.7.3 を使用してスクリプトを実行したいのですが、問題は、2 台のコンピューターが異なる方法で python 2.7.3 を指定していることです。コンピューターの 1 つは arch linux を実行しており、このコンピューターでは python2 という名前が付けられています。もう一方のコンピューターは redhat linux を実行しており、python2.7.3 という名前を使用しています。

スクリプトを変更せずに両方のコンピューターで実行できるようにするには、シバン行で何を使用すればよいですか? 私が本当に欲しいのは、使用する Python のバージョンを選択できる、ある種の条件付きシバン行です。運が悪かっただけで、スクリプトの 2 つの異なるバージョンを保持する必要がありますか?

PS #!/usr/bin/env python だけを使用することはできません。これは、arch linux コンピューターでは python 3.2.3 を参照し、redhat linux コンピューターでは python 2.4 を参照するためです。

4

2 に答える 2

10
#!/bin/sh
# -*- mode: Python -*-

""":"
# bash code here; finds a suitable python interpreter and execs this file.
# prefer unqualified "python" if suitable:
python -c 'import sys; sys.exit(not (0x020500b0 < sys.hexversion < 0x03000000))' 2>/dev/null \
    && exec python "$0" "$@"
for pyver in 2.6 2.7 2.5; do
    which python$pyver > /dev/null 2>&1 && exec python$pyver "$0" "$@"
done
echo "No appropriate python interpreter found." >&2
exit 1
":"""

import sys
print sys.version

https://github.com/apache/cassandra/blob/trunk/bin/cqlshから取得

于 2013-10-21T08:17:05.023 に答える
6

さまざまなバージョンの Python 実行可能ファイルを調べて、見つかったものを使用する小さなラッパー スクリプトを作成できます。

例えば:

#!/bin/sh -e
pythons=('python2', 'python2.7.3')
for py_exec in ${pythons[@]}; do
    py_exec="/usr/bin/$py_exec"
    if [[ -f $py_exec ]]; then
        exec $py_exec $1
    fi
done

もちろん、このスクリプトは開始サンプルにすぎません。さまざまな方法で改善できるはずです。私が言いたいことのアイデアを教えてください。

于 2012-08-22T11:04:54.073 に答える