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. python后续学习

    关于使用python输出中文字符的问题: Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错. 解决方法为只要在文件开头加入 # -*- co ...

  2. Flink流处理(一)- 状态流处理简介

    1. Flink 简介 Flink 是一个分布式流处理器,提供直观且易于使用的API,以供实现有状态的流处理应用.它能够以fault-tolerant的方式高效地运行在大规模系统中. 流处理技术在当今 ...

  3. flutter_html 和 WebView 解析html 和 build.gradle源码

    一.flutter_html 涉及的 api 接口: http://www.phonegap100.com/appapi.php?a=getPortalArticle&aid=20 二.Flu ...

  4. update_jz首项V5.0-Tutorial

    What's New: 增加了4个对话框,用于展示信息.归并条目.剔除条目 增加了可视化统计图形中每个科室(柱形)的统计总数 可视化图形一些颜色调整(无奈在省份很多的条件下一些颜色还不易区分) 下面是 ...

  5. RPC 学习(一)认识

    文章部分描述来自参考资料 RPC 什么是RPC     RPC(Remote Procedure Call)-远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. ...

  6. 为什么各家银行都抢着办理ETC业务?

    最近据于各家银行抢着办ETC业务的话题很火,各家银行不仅有很大的折扣力度,而且又是送油卡又是送现金的,银行为什么会如此乐此不疲?为了让车主办理自家的ETC业务,银行究竟有多卖力? 就在近日,网上疯传一 ...

  7. try catch 语句中有return 的各类情况

    在牛客上做java题时遇到过多到关于try catch语句的问题,看了很多答案解析,在这里记录一下. 首先给出一道题目: 下面代码的运行结果为? A.catch语句块 和是43 B.编译异常 C.fi ...

  8. Vue中引入静态JS文件(爬坑)

    前言(背景介绍) 开发的项目需要与Threejs的3D项目结合在一起,需要静态引入,jquery.js,stats.js,three.js,ThreeBSP.js等静态文件.开发环境是iview-ad ...

  9. Django之form表单操作

    小白必会三板斧 from django.shortcuts import render,HttpResponse,redirect HttpRespone:返回字符串 render:返回html页面 ...

  10. 多核 CPU 和多个 CPU 有何区别?

    原文来自:http://www.solves.com.cn/it/yj/CPU/2019-06-24/1122.html 多核CPU和多CPU的区别主要在于性能和成本.多核CPU性能最好,但成本最高: ...