#!/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
Dies wird zunächst als Shell-Skript ausgeführt. Sie können fast jeden Shell-Code zwischen ''''
einfügen und # '''
. Dieser Code wird von der Shell ausgeführt. Wenn dann Python auf der Datei läuft, ignoriert Python die Zeilen, da sie für Python wie Zeichenfolgen in dreifachen Anführungszeichen aussehen.
Das Shell-Skript testet, ob die Binärdatei im Pfad mit which python2 >/dev/null
vorhanden ist und führt es dann aus, falls dies der Fall ist (mit allen Argumenten an der richtigen Stelle). Weitere Informationen hierzu finden Sie unter Warum funktioniert dieses Snippet mit einem Shebang #!/bin/sh und exec python innerhalb von 4 einfachen Anführungszeichen?
Hinweis:Die Zeile beginnt mit vier '
und zwischen dem vierten '
darf kein Leerzeichen stehen und der Start des Shell-Befehls (which
...)
Etwa so:
#!/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)
Aktualisieren Unten ist eine robustere Version davon.
#!/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 >>>
@@