在 Python 脚本的第一行经常见到这样的注释:
#!/usr/bin/env python3
或者
#!/usr/bin/python3
含义
在脚本中, 第一行以 #! 开头的代码, 在计算机行业中叫做 “shebang”, 也叫做 sha-bang / hashbang / pound-bang / hash-pling, 其作用是"指定由哪个解释器来执行脚本"。
为什么要指定解释器?
举个例子, 很多人在系统中同时安装了 Python2 和 Python3, 但是 2 和 3 是不兼容的, 所以执行脚本时必须指定解释器。
再比如说, Unix 系统中一般同时安装了多个版本的 Shell, 比如常用的 bash、sh 和 现代的 zsh, 但是这些 shell 的语法并不完全相同, 所以也需要指定解释器。
如何指定解释器?
- 1.执行脚本的时候直接指定解释器:
python3 ./hello.py
如果要传入参数,写在后面就可以,空格隔开
python3 ./hello.py para1 para2
这种方法适用于windows和linux。
- 2.用#!来指定解释器(即sha-bang)
这种方法仅限于linux系统。
这里我特意将文件后缀写为txt,就是为了说明,在linux里文件后缀是什么一点儿也不重要,重要的是文件内容,这里文件没有后缀结果也一模一样。
在windows里,不存在sha-bang这种用法,目前都是使用第一种方法。 - 3.如果既在终端指定了释义器,同时文件内又有sha-bang,参考链接中以终端指定的释义器为准,但是我的实际验证并不是,而是会报错。。。下图可知,我的python2是存在的,但是由于文件内的sha-bang写的是python3,于是报错了~为什么呢?参考链接中的说法其实是正确的。报错是说print语法错误。
python2和python3语法差别很大。将文本改为:
#!/home/zy/Downloads/anaconda/python3
import sys
print "Hello World"
for i in sys.argv:
print(i)
这正好说明了终端指定释义器后,#!这一行会直接跳过。