#!/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
Questo viene prima eseguito come uno script di shell. Puoi inserire quasi tutti i codici shell tra ''''
e # '''
. Tale codice verrà eseguito dalla shell. Quindi, quando python viene eseguito sul file, python ignorerà le righe poiché a python sembrano stringhe tra virgolette triple.
Lo script della shell verifica se il binario esiste nel percorso con which python2 >/dev/null
e poi lo esegue se è così (con tutti gli argomenti nel posto giusto). Per ulteriori informazioni, consulta Perché questo frammento con shebang #!/bin/sh e exec python all'interno di 4 virgolette singole funziona?
Nota:la riga inizia con quattro '
e non devono esserci spazi tra il quarto '
e l'inizio del comando shell (which
...)
Qualcosa del genere:
#!/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)
Aggiorna Di seguito è riportata una versione più robusta dello stesso.
#!/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 >>>
@@