赞
踩
背景:经常在python脚本文件看到第一行是 #!/usr/bin/python 或 #!/usr/bin/env python
#!
叫做 Shebang 或Sha-bang,也可叫做“释伴”——“解释伴随行”的简称,通常出现在类Unix系统
的脚本中第一行作为前两个字符。
在Shebang之后,可以有一个或数个空白字符,后接解释器的绝对路径,用于指明执行这个脚本文件的解释器,如上述/usr/bin/python
和/usr/bin/env python
思考一下,为什么有的python脚本文件没有上述第一行来指定解释器路径也没有影响?这种python脚本文件,
其实对1和2两种方式,我们已经事先指定好了解释器路径。
1是在IDE设置中已经设定了默认的或自定义的解释器路径;2是在安装python时配置了的环境变量,执行python命令时在环境变量中依次查找名为python的可执行文件,因此不需要再输入完整的解释器路径,如下图所示,
特别的,1是基于如Windows操作系统这类可以安装这些IDE进行图形化界面操作而言的,但项目一般最终运行在服务器上,而服务器大都是类Unix操作系统。释伴正是针对类Unix操作系统,在脚本文件中指定运行此脚本文件的解释器路径。
python脚本文件第一行加上#!/usr/bin/python后 ,当这个文件有可执行权限时,可直接执行,执行此python脚本文件的正是/usr/bin路径下的python解释器,如下所示:
首先观察下图,执行env python后,进入了 Python console 模式,这似乎与上述直接执行 python 没什么区别。
本质上确实是一样的!因为env命令用于显示系统中已存在的环境变量,以及在定义的环境中执行指令。
当env python时,它其实会去 env | grep PATH 里(假如PATH是/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin,python解释器在 /usr/bin/python。)这几个路径里去依次查找名为python的文件(这里的文件包括但不限于python解释器,如带有释伴的文件名为“python”的python脚本),如下例:
在 /usr/local/sbin 下创建一个名称也为 python 的脚本文件时,观察下图,
运行说明:在/usr/local/sbin路径下创建的python文件的内容为上述3.1提到的demo.py的内容!当输入env python后,输出python文件的运行结果:Hello
以上为 在命令行中 通过env命令,在系统的PATH目录中查找并执行python文件的过程。如若想要 在python脚本中 实现(调用环境变量的python解释器来执行此脚本),可在脚本文件第一行写上 #!/usr/bin/env python
。
因为不是所有的机器的 python 解释器路径都是 /usr/bin/python,显然#!/usr/bin/env python
比#!/usr/bin/python
需指定固定路径的python解释器更灵活。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。