有很多很好的 理由使用 #! /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)
请注意,它们仅在shebangs上有所不同。
bintest.py
按预期运行
br@carina:~$ ./bintest.py & ps && killall bintest.py [1] 15061 PID TTY 时间命令 14625 点/0 00:00:00 重击 15061 分/0 00:00:00 bintest.py 15062 点/0 00:00:00 ps br@carina:~$ [1]+ 终止 ./bintest.py
但envtest.py
做了一些不太理想的事情
br@carina:~$ ./envtest.py & ps && killall envtest.py [1] 15066 PID TTY 时间命令 14625 点/0 00:00:00 重击 15066 分/0 00:00:00 蟒蛇 15067 点/0 00:00:00 ps envtest.py:找不到进程 br@carina:~$ killall python br@carina:~$ [1]+ 终止 ./envtest.py
我们看到的是 using#! /usr/bin/env
导致进程收到名称“python”而不是“envtest.py”,从而使我们killall
无效。在某种程度上,我们似乎已经将一种可移植性换成了另一种:我们现在可以轻松地更换 python 解释器,但我们已经失去了命令行上的“kill-ability”。那是怎么回事?如果这里有实现两者的最佳实践,那是什么?