Есть много хороших причин для использования #! / usr / bin / env. Итог: это делает ваш код более переносимым. Ну вроде. Проверьте это ....
У меня есть два почти идентичных сценария, bintest.py
#! /usr/bin/python
import time
time.sleep(5*60)
и envtest.py
#! /usr/bin/env python
import time
time.sleep(5*60)
Обратите внимание, что они отличаются только своими шебангами ].
bintest.py
работает, как ожидалось
br@carina:~$ ./bintest.py & ps && killall bintest.py [1] 15061 PID TTY TIME CMD 14625 pts/0 00:00:00 bash 15061 pts/0 00:00:00 bintest.py 15062 pts/0 00:00:00 ps br@carina:~$ [1]+ Terminated ./bintest.py
, но envtest.py
делает что-то менее оптимальное
br@carina:~$ ./envtest.py & ps && killall envtest.py [1] 15066 PID TTY TIME CMD 14625 pts/0 00:00:00 bash 15066 pts/0 00:00:00 python 15067 pts/0 00:00:00 ps envtest.py: no process found br@carina:~$ killall python br@carina:~$ [1]+ Terminated ./envtest.py
Мы видели, что при использовании #! / usr / bin / env
заставил процесс получить имя «python», а не «envtest.py», что сделало наш killall
неэффективным. На каком-то уровне кажется, что мы обменяли один вид переносимости на другой: теперь мы можем легко менять интерпретаторы Python, но мы потеряли «возможность уничтожения» в командной строке. Что с этим?