6
votes

Shell Scripting Vérification de la version Python

J'ai le script shell suivant pour interroger la version Python. Cela me donne une erreur indiquant "expression entier attendue" code> sur la déclaration IF.

#!/bin/bash


PYTHON_VERSION=`python -c 'import sys; print("%i" % (sys.hexversion<0x03000000))'`

echo $PYTHON_VERSION

if [ $PYTHON_VERSION -eq 0 ]
then
    echo "fine!"
fi


1 commentaires

Pourriez-vous cligner quel OS et votre shell utilisez-vous? Je l'ai essayé sous OS X avec Bash et ZSH, fonctionne bien.


3 Réponses :


0
votes

Voici une solution possible

if sys.version_info < (3, 0):
    reload(sys)
    sys.setdefaultencoding('utf8')
else:
    raw_input = input


1 commentaires

N'est-ce pas son problème sur la coquille?



7
votes

bonne question. Pour moi, ça marche bien. Vous devez toujours citer les variables évaluées ( "$ x" au lieu de $ x ); Peut-être que cela corrige votre erreur.

Mais je propose d'utiliser le résultat du script Python au lieu de sa sortie: xxx

Si vous souhaitez rester complètement dans la coquille complètement, Vous pouvez également utiliser l'option - version : xxx

peut-être plus lisible.


0 commentaires

2
votes

La raison pour laquelle cela ne fonctionne pas est que le résultat stocké en $ python_version n'est pas un entier, votre test d'égalité est donc effectué avec deux types différents.

Vous pouvez modifier le si: xxx

ou vous pouvez simplement faire: xxx


2 commentaires

OK, je pensais que Bash convertirait implicitement entre String-to-Int et IntT-to-String?


C'est le problème, le problème n'est pas avec la conversion, mais comment -eq interprétant l'expression. Il y a quelques cas que vous devez avoir: si [[]] au lieu de si [] ou -eq ne fera pas la bonne chose.