zoukankan      html  css  js  c++  java
  • #!/usr/bin/python与#!/usr/bin/env python的区别

    !/usr/bin/python与#!/usr/bin/env python的区别


    我们经常会在别人的脚本或者项目的入口文件里看到第一行是下面这样

    #!/usr/bin/python
    或者这样

    #!/usr/bin/env python
    这两者有什么区别呢?

    前一个很好理解,就是在执行这个脚本的时候用/usr/bin下python命令去执行。

    那#!/usr/bin/env python 这个是什么意思 ?

    当我执行 env python 时,自动进入了 python console 的模式。

    这是为什么呢?这样做和直接执行 python 好像没什么区别。

    查阅man env命令可以看到,env的作用是列出所有的环境变量。

    ENV(1)                                                                       User Commands                                                                       ENV(1)
    
    NAME
           env - run a program in a modified environment
    
    SYNOPSIS
           env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]
    
    DESCRIPTION
           Set each NAME to VALUE in the environment and run COMMAND.  # 将name=value设置给环境,然后在环境中执行command。换句话说,env命令为command的执行准备了一个执行环境
    
           Mandatory arguments to long options are mandatory for short options too.
    
           -i, --ignore-environment
                  start with an empty environment
    
           -0, --null
                  end each output line with 0 byte rather than newline
    
           -u, --unset=NAME
                  remove variable from the environment
    
           --help display this help and exit
    
           --version
                  output version information and exit
    
           A mere - implies -i.  If no COMMAND, print the resulting environment.
    
    

    env python就是给python命令指定一个执行环境,这个执行环境是由env命令列出的环境变量组成的。

    当你执行 env python 时,它其实会去 env | grep PATH 里(也就是 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin )这几个路径里去依次查找名为python的可执行文件。

    找到一个就直接执行,上面我们的 python 路径是在 /usr/bin/python 里。

    那么对于这两者,我们应该使用哪个呢?

    一般而言,应该优先使用 #!/usr/bin/env python,因为不是所有的机器的 python 解释器都在 /usr/bin/python 。





  • 相关阅读:
    JDK 和 OpenJDK 的区别
    IntelliJ IDEA 使用 Git 并将 GitHub 作为远程代码仓库
    SQL 常用语法记录整理
    SpringBoot SpringApplication底层源码分析与自动装配
    一步步从Spring Framework装配掌握SpringBoot自动装配
    SpringBoot系列教程起步
    Redis高级进阶
    Redis构建文章聚合信息分类网站
    Redis快速起步及Redis常用命令大全
    Redis构建处理海量数据的大型购物网站
  • 原文地址:https://www.cnblogs.com/zhangzl419/p/15222408.html
Copyright © 2011-2022 走看看