Python shebang与Python3一起使用

时间:2017-05-04 21:25:08

标签: linux python-3.x shebang

我有以下python文件:

vagrant@vagrant-ubuntu-trusty-64:~/my_app$ cat version_py3.py
#!/usr/bin/env python3

print "Python 2 print statement"

我认为 python version_py3.py 会强制使用python3。但代码运行良好。和 python3 version_py3.py 给出了预期的错误。

vagrant@vagrant-ubuntu-trusty-64:~/my_app$ python3 version_py3.py
  File "version_py3.py", line 3
    print "Python 2 print statement"
                               ^

另外,我的linux上没有/ usr / bin / env文件夹。我在这里错过了什么东西,但是我的计算机上安装了Python 2和Python 3。

vagrant@vagrant-ubuntu-trusty-64:~/my_app$ python -V
Python 2.7.6
vagrant@vagrant-ubuntu-trusty-64:~/my_app$ python3 -V
Python 3.4.3
vagrant@vagrant-ubuntu-trusty-64:~/my_app$

3 个答案:

答案 0 :(得分:1)

尝试使用locate定位python安装,并将其设置在shebang中,如#!/usr/bin/python3.6。我打赌它在这里。

答案 1 :(得分:1)

当你执行一个脚本而你想要尊重shebang行时,你可能不会预先添加" python"在命令中。作为命令的头部的二进制可执行文件,也可以在she-bang中工作,任何给定的she-bang都会被忽略,因为内核始终首选命令可执行文件。

示例:所以,让我们假设您有一个小蟒蛇脚本,但是在shebang中有猫。当您设置脚本的可执行位并将其称为命令头时,会发生什么?系统首先读取第一行,剥离最初的两个字节并尝试执行(强制二进制)可执行文件并将其提供给脚本文件

$ /tmp/getver
#!/bin/cat
import sys
print( sys.version )

现在尝试看看自己在pythonpython2和/或python3之前。

琐事:口译员可能选择自己另一次处理shebang。例如。 perl过去常常尊重-w给出的任何标志,无论是在shebang上还是在命令上,无论perl是否为命令头。

答案 2 :(得分:0)

我不确定您是否找到了解决方案。在python3中,print的语法不同。消息必须在括号内。

尝试print("Python 2 print statement")