#! を使用する正当な 理由はたくさんあります。/usr/bin/env. 結論: コードの移植性が向上します。そうですね。これをチェックしてください....
ほぼ同一のスクリプトが 2 つあり、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 時間コマンド 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 を終了しました
私たちが見たのは、を使用#! /usr/bin/env
すると、プロセスが「envtest.py」ではなく「python」という名前を受け取るため、killall
効果がなくなったことです。あるレベルでは、ある種の移植性を別の移植性と交換したように見えます: Python インタープリターを簡単に交換できるようになりましたが、コマンド ラインでの "kill-ability" が失われました。どうしたの?両方を達成するためのベスト プラクティスがあるとすれば、それは何ですか?