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"
?
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"
?
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.
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
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 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.
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 utiliserpython -V
.