python 解释器声明 unix #!/usr/bin/env python

1. 问题的开始
在代码移植到unix平台后,部分应用在运行时报如下错误:
subprocess.Popen():OSError:[Errno 8] python中的exec格式错误?
查阅得知可能是找不到编译器,但新的问题是python run.py仍然报错。。。。。。
需要注意的是,这个问题是在unix下才会发生的,另一个奇怪的事实是对于部分简单的py脚本并没有出现这个问题。
案例:
test.py
#coding:utf-8
print(‘www’)
python test.py #正常运行

查阅发现所有的解决方案都是声明编译器。
总而言之,声明解释器就可以解决了。
#!/usr/bin/env python

2. python文件声明
使用Linux系统时:
#!/usr/bin/python:代码文件由python编译器执行,否则执行时需要显示调用
python XXX.py
添加声明后,可以直接用./XXX.py方式执行文件,当然需要可执行权限
chmod +x XXX.py
添加此行代码能方便执行.py脚本。

#!/usr/bin/env python:这种写法是为了解决python并没有装在默认的/usr/bin路径下所带来的问题,这行代码会使声明需要到env设置里查找python的安装路径,再查找到的解释器执行脚本。
如果安装了多个版本的Python,/usr/bin/env将确保使用的解释器是您环境中的第一个$PATH。

#-- coding:utf-8 --:是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

使用Windows系统时:
系统会用文件名的后缀(扩展名)来判断文件类型。因此,#!/usr/bin/python或#!/usr/bin/env python在Window系统下相当于注释。

3. 关于#!
在Unix中,一个可以解释的可执行文件可以通过#!在第一行的开头加上解释器(以及它可能需要的任何标志)来指示要使用的解释器。
当然,正在其它平台,这条规则不一定适用(但“shebang line”没有任何坏处,如果将该脚本复制到具有 Unix基础的平台,例如Linux,Mac ,也会起同样作用)。

这被称为shebang线。
维基百科释义:
在计算中,一个shebang(也称为hashbang,hashpling,pound bang或crunchbang)指的是字符“#!” 当它们是解释器指令中的前两个字符作为文本文件的第一行时。在类Unix操作系统中,程序加载器将这两个字符作为文件是脚本的指示,并尝试使用文件中第一行其余部分指定的解释器来执行该脚本。

python 解释器声明 unix #!/usr/bin/env python的更多相关文章

  1. 调用python脚本报错/usr/bin/env: python : No such file or directory

    一.调用python脚本报错 /usr/bin/env: python: No such file or directory 二.解决方法 原因是在windows上编写的脚本,使用dos2unix对脚 ...

  2. 关于在linux python源文件头部添加 “#!/usr/bin/env python” 不能直接运行的问题

    如果环境变量设置正确 如果文件是从windows拷贝到linux中的 可能是换行符造成的.试试dos2unix命令,或相似的命令,把dos格式的换行符转为unix格式.

  3. /usr/bin/python与/usr/bin/env python的区别

    Infi-chu: http://www.cnblogs.com/Infi-chu/ /usr/bin/env python执行时,先查找python解释器的路径,然后执行./usr/bin/pyth ...

  4. python中#!/usr/bin/python与#!/usr/bin/env python的区别

    目的是在运行python脚本的时候告诉操作系统我们要用python解释器去运行py脚本 所以我们在第一句往往会写如下两句中的其中一句: #!/usr/bin/python 或 >#!/usr/b ...

  5. #!/usr/bin/env python 是什么

    #!/usr/bin/env python 这一行注释经常出现在Python脚本的第一行.这一行到底用来干嘛的呢?原因很简单,任何Python脚本执行都需要靠Python解释器.这一行注释正是告诉计算 ...

  6. 人们为什么在Python脚本的第一行上编写#!/ usr / bin / env python shebang?

    在我看来,如果没有该行,文件运行相同. #1楼 您可以使用virtualenv尝试此问题 这是test.py #! /usr/bin/env python import sys print(sys.v ...

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

    [摘自:http://blog.csdn.net/wh_19910525/article/details/8040494] 一般的python文件的开头都有#!/usr/bin/python.这是什么 ...

  8. !/usr/bin/env python和!/usr/bin/python的区别

    脚本语言第一行 作用:文件中代码用指定可执行程序运行 #!/usr/bin/Python  执行脚本时,调用/usr/bin下python解释器 #!/usr/bin/env python  在环境设 ...

  9. python中#!/usr/bin/env python与#!/usr/bin/python

    通常在脚本语言的第一行会看到#!/usr/bin/env python 与 #!/usr/bin/python其中之一,这两句话的目的都是指出你的python文件用什么可执行程序去运行它. #!/us ...

随机推荐

  1. 发送数据给sap和接收

    1.确保已经连通sap 2.发送数据:这是以表的形式发送,而且是批量发送给sap 3.接收sap返回信息:这个比较特别,碰到时试一试 package com.yiyezhiqiu.lyh.utils; ...

  2. 每天进步一点点------Allegro 群组布线

    执行Route->connect命令,设置好控制面板中的内容.然后设置同时走线的GROUP包含哪些网络,有两种方法.第一种方法,如果几个网络是紧邻的,可以直接框选,选中的网络就会被包含在GROU ...

  3. Java学习笔记(八)面向对象---抽象类

    当多个类中出现相同功能,但是功能主体不同时,我们可以向上抽取,只抽取功能定义,而不抽取功能主体. 抽象类的特点 抽象方法一定在抽象类中. 抽象方法和抽象类都必须被abstract关键字修饰. 抽象类不 ...

  4. jmeter的使用---用户变量

    用户变量有以下方式: 一.外部引入:csv引入参数 二.sample传递参数:http请求的body参数 三.定义用户变量:全局变量 (1)用户定义的变量 name,和value   一对一 (2)用 ...

  5. IntelliJ IDEA 2017.3尚硅谷-----卸载

    直接在用户目录下搜索,卸载的干净就要删除 删除这两个目录,重启idea可以还原配置. editplus删除后重启也是这个效果

  6. 安装mongo以及相关扩展

    背景:看到了一个nodejs的对mongo操作的课程,于是想学一下. * 1.于是打算先在自己的vps上安装一个mongodb:[ https://docs.mongodb.org/manual/tu ...

  7. bugku 矛盾 30

    首先打开网址链接会发现一串代码 然后进行分析代码的意思首先是一个函数查一下这个函数 然后会发现现代码第一句写的是输入数字,然后会发现第二行有一个感叹号意思是输入的如果不是数字则回复数字 如果输入数字则 ...

  8. 第一struts2程序

    今天学习了第一个struts2程序 第一步建立一个java web程序 第二步 加入jar包 第三步 添加两个jsp文件 login.jsp和result.jsp文件 login.jsp 在body部 ...

  9. 网络技能大赛A卷测试

    这个测试对我来言有些难度,短时间内做不了太多.首先是思路的理清,登录后的界面有好几种,而且公文的状态也有好几种.理清思路就花了一些时间 然后大致的框架做了做,然后将用户的增删改查还有公文的增删改查写了 ...

  10. 【Python】文件下载小助手

    import requests from contextlib import closing class ProgressBar(object): def __init__(self, title, ...