我有以下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$
答案 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 )
现在尝试看看自己在python
,python2
和/或python3
之前。
琐事:口译员可能选择自己另一次处理shebang。例如。 perl
过去常常尊重-w
给出的任何标志,无论是在shebang上还是在命令上,无论perl
是否为命令头。
答案 2 :(得分:0)
我不确定您是否找到了解决方案。在python3中,print的语法不同。消息必须在括号内。
尝试print("Python 2 print statement")