#!/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
Esto se ejecuta primero como un script de shell. Puede poner casi cualquier código de shell entre ''''
y # '''
. Dicho código será ejecutado por el shell. Luego, cuando python se ejecuta en el archivo, python ignorará las líneas ya que se ven como cadenas entre comillas triples para python.
El script de shell prueba si el binario existe en la ruta con which python2 >/dev/null
y luego lo ejecuta si es así (con todos los argumentos en el lugar correcto). Para obtener más información sobre esto, consulte ¿Por qué funciona este fragmento con un shebang #!/bin/sh y exec python dentro de 4 comillas simples?
Nota:La línea comienza con cuatro '
y no debe haber espacio entre el cuarto '
y el inicio del comando de shell (which
...)
Algo como esto:
#!/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)
Actualizar A continuación se muestra una versión más robusta de la misma.
#!/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 >>>
@@