104 votes

Détecter la version de python dans le shell script.

J'aimerais détecter si python est installé sur un système Linux et si oui, quelle version de python est installée.

Comment puis-je le faire ? Existe-t-il quelque chose de plus gracieux que d'analyser la sortie de "python --version" ?

4 votes

Pourquoi python --version n'est pas gracieux ? Peut-être /usr/bin/env python --version ?

5 votes

Ce que je voulais dire par "non gracieux", c'est que le format de la chaîne peut changer à l'avenir, ce qui invaliderait l'analyse de la chaîne.

1 votes

Python 2.4 renvoie une erreur pour python --version . Vous devez utiliser python -V .

89voto

NPE Points 169956

Vous pourriez utiliser quelque chose du type suivant :

$ python -c 'import sys; print(sys.version_info[:])'
(2, 6, 5, 'final', 0)

Le tuple est documenté aquí . Vous pouvez développer le code Python ci-dessus pour formater le numéro de version d'une manière qui répondrait à vos besoins, ou même pour effectuer des contrôles sur celui-ci.

Vous devez vérifier $? dans votre script pour gérer le cas où python n'est pas trouvé.

P.S. J'utilise une syntaxe un peu bizarre pour assurer la compatibilité avec Python 2.x et 3.x.

36voto

larsmans Points 167484
python -c 'import sys; print sys.version_info'

ou, lisible par l'homme :

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

22voto

Jahid Points 12756

Vous pouvez aussi l'utiliser :

pyv="$(python -V 2>&1)"
echo "$pyv"

19voto

Sohrab T Points 555

J'ai utilisé la réponse de Jahid avec Extraire le numéro de version d'une chaîne de caractères pour faire quelque chose de purement écrit en shell. Il ne renvoie également qu'un numéro de version, et non le mot "Python". Si la chaîne est vide, Python n'est pas installé.

version=$(python -V 2>&1 | grep -Po '(?<=Python )(.+)')
if [[ -z "$version" ]]
then
    echo "No Python!" 
fi

Et disons que vous voulez comparer le numéro de version pour voir si vous utilisez une version à jour de Python, utilisez ce qui suit pour supprimer les points dans le numéro de version. Vous pouvez ensuite comparer les versions en utilisant des opérateurs entiers comme "Je veux une version de Python supérieure à 2.7.0 et inférieure à 3.0.0". Référence : ${var//Pattern/Replacement} dans http://tldp.org/LDP/abs/html/parameter-substitution.html

parsedVersion=$(echo "${version//./}")
if [[ "$parsedVersion" -lt "300" && "$parsedVersion" -gt "270" ]]
then 
    echo "Valid version"
else
    echo "Invalid version"
fi

18voto

Lilás Points 956

Voici une autre solution utilisant hash pour vérifier si python est installé et sed pour extraire les deux premiers chiffres majeurs de la version et comparer si la version minimale est installée.

if ! hash python; then
    echo "python is not installed"
    exit 1
fi

ver=$(python -V 2>&1 | sed 's/.* \([0-9]\).\([0-9]\).*/\1\2/')
if [ "$ver" -lt "27" ]; then
    echo "This script requires python 2.7 or greater"
    exit 1
fi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X