#!/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
Nejprve se spustí jako skript shellu. Mezi ''''
můžete vložit téměř jakýkoli kód shellu a # '''
. Takový kód bude spuštěn shellem. Poté, když python běží na souboru, python bude ignorovat řádky, protože vypadají jako řetězce s trojitými uvozovkami pro python.
Shell skript testuje, zda binární soubor existuje v cestě s which python2 >/dev/null
a pak jej provede, pokud ano (se všemi argumenty na správném místě). Další informace naleznete v tématu Proč funguje tento úryvek se znakem #!/bin/sh a exec python uvnitř 4 jednoduchých uvozovek?
Poznámka:Řádek začíná čtyřmi '
a mezi čtvrtým '
nesmí být žádná mezera a začátek příkazu shellu (which
...)
Něco takového:
#!/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)
Aktualizovat Níže je jeho robustnější verze.
#!/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 >>>
@@
Příkaz apache suexec není v docrootu
Aplikaci Node.js nelze spustit na portu 80, i když port neblokuje žádný jiný proces