"python myscript" 忽略 pythonX 不存在的“#!/usr/bin/env pythonX”
"python myscript" ignores "#!/usr/bin/env pythonX" where pythonX doesn't exist
为什么 test.py
未安装 Python 3 时不会抛出错误 env: python3: No such file or directory
?
我的系统 (Mac OS X) 安装了 Python 2.7,但没有安装 Python 3:
$ /usr/bin/env python -V
Python 2.7.12
$ /usr/bin/env python3 -V
env: python3: No such file or directory
文件test.py:
#!/usr/bin/env python3
import sys
print sys.executable
正在执行test.py:
$ python test.py
/usr/local/opt/python/bin/python2.7
我认为由于 Python 3 在我的系统上不存在,所以使用 shebang 行 #!/usr/bin/env python3
将抛出错误并终止脚本。但是 env
实际上选择了 Python 2.7 解释器。
shebang 在尝试执行脚本时由 OS 解释。当你键入 python test.py
时,OS 执行 python
并且 python
执行脚本(并且 python
是根据当前的 PATH
找到的)作为反对被 OS.
处理
如果您使脚本可执行 (chmod +x test.py
) 然后尝试直接执行它 (例如 ./test.py
),OS 将负责 运行ning脚本,因此它将查看 shebang 以确定哪个程序对 运行 脚本负责。在这种情况下,/usr/bin/env
将查找 python3
并尝试使用它。由于 python3
不存在(或在您的 PATH
上找不到),您将看到错误。
仅当您直接对文件执行 test.py
、运行 而不是 运行 python
并以 test.py
作为参数时,才会处理 shebang。当您执行 python test.py
时,Python 会完全忽略 shebang 行。
为什么 test.py
未安装 Python 3 时不会抛出错误 env: python3: No such file or directory
?
我的系统 (Mac OS X) 安装了 Python 2.7,但没有安装 Python 3:
$ /usr/bin/env python -V
Python 2.7.12
$ /usr/bin/env python3 -V
env: python3: No such file or directory
文件test.py:
#!/usr/bin/env python3
import sys
print sys.executable
正在执行test.py:
$ python test.py
/usr/local/opt/python/bin/python2.7
我认为由于 Python 3 在我的系统上不存在,所以使用 shebang 行 #!/usr/bin/env python3
将抛出错误并终止脚本。但是 env
实际上选择了 Python 2.7 解释器。
shebang 在尝试执行脚本时由 OS 解释。当你键入 python test.py
时,OS 执行 python
并且 python
执行脚本(并且 python
是根据当前的 PATH
找到的)作为反对被 OS.
如果您使脚本可执行 (chmod +x test.py
) 然后尝试直接执行它 (例如 ./test.py
),OS 将负责 运行ning脚本,因此它将查看 shebang 以确定哪个程序对 运行 脚本负责。在这种情况下,/usr/bin/env
将查找 python3
并尝试使用它。由于 python3
不存在(或在您的 PATH
上找不到),您将看到错误。
仅当您直接对文件执行 test.py
、运行 而不是 运行 python
并以 test.py
作为参数时,才会处理 shebang。当您执行 python test.py
时,Python 会完全忽略 shebang 行。