#!/bin/sh
''''which python2 >/dev/null 2>&1 && exec python2 "$0" "[email protected]" # '''
''''which python >/dev/null 2>&1 && exec python "$0" "[email protected]" # '''
''''exec echo "Error: I can't find python anywhere" # '''
import sys
print sys.argv
Ceci est d'abord exécuté en tant que script shell. Vous pouvez mettre presque n'importe quel code shell entre ''''
et # '''
. Ce code sera exécuté par le shell. Ensuite, lorsque python s'exécute sur le fichier, python ignorera les lignes car elles ressemblent à des chaînes entre guillemets triples pour python.
Le script shell teste si le binaire existe dans le chemin avec which python2 >/dev/null
puis l'exécute si c'est le cas (avec tous les arguments au bon endroit). Pour en savoir plus, consultez Pourquoi cet extrait avec un shebang #!/bin/sh et exec python entre 4 guillemets simples fonctionne-t-il ?
Remarque :La ligne commence par quatre '
et il ne doit y avoir aucun espace entre le quatrième '
et le début de la commande shell (which
...)
Quelque chose comme ça :
#!/usr/bin/env python
import sys
import os
if sys.version_info >= (3, 0):
os.execvp("python2.7", ["python2.7", __file__])
os.execvp("python2.6", ["python2.6", __file__])
os.execvp("python2", ["python2", __file__])
print ("No sutable version of Python found")
exit(2)
Mettre à jour Vous trouverez ci-dessous une version plus robuste de la même chose.
#!/bin/bash
ok=bad
for pyth in python python2.7 python2.6 python2; do
pypath=$(type -P $pyth)
if [[ -x $pypath ]] ; then
ok=$(
$pyth <<@@
import sys
if sys.version_info < (3, 0):
print ("ok")
else:
print("bad")
@@
)
if [[ $ok == ok ]] ; then
break
fi
fi
done
if [[ $ok != ok ]]; then
echo "Could not find suitable python version"
exit 2
fi
$pyth <<@@
<<< your python script goes here >>>
@@