2017-05-04 56 views
1

Python的家当行,我有以下Python文件:与Python3

[email protected]:~/my_app$ cat version_py3.py 
#!/usr/bin/env python3 

print "Python 2 print statement" 

,我想蟒蛇version_py3.py将强制使用python3的。但代码运行良好。和python3 version_py3.py给出了预期的错误。

[email protected]:~/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都安装在我的电脑上。

[email protected]:~/my_app$ python -V 
Python 2.7.6 
[email protected]:~/my_app$ python3 -V 
Python 3.4.3 
[email protected]:~/my_app$ 
+0

hm,'env python3'运行的是什么? 'env'只是另一个shell命令,不存在文件夹。 –

+0

您是如何在第一个实验中运行脚本的? '/ version_py3.py'? '/ usr/bin/env'是一个在PATH上查找'python3'的程序。它是基于ubuntu安装的一部分,如果它不在那里,则会出现严重错误。试图以缺少'env'的'。/ version_py3.py'运行程序应该会导致错误。像“糟糕的解释器”。而python不应该运行。 – tdelaney

+0

OP不会告诉我们他是如何运行这个程序的,这个程序让人猜测这个问题毫无意义。我正在投票结束。 – tdelaney

回答

1

尝试位于Python安装与locate例如,并将其设置在你的家当,如#!/usr/bin/python3.6。我敢打赌它在这里。

+0

1)在linux上键入“which python3”来定位二进制文​​件。 2)这不是跨平台的做法。你的代码应该可以在任何操作系统中使用,因此他要求usr/bin/env。 – JohnJohn

0

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

尝试print("Python 2 print statement")

1

当你执行一个脚本,你想拥有的家当线尊重,你可能无法在命令前加上“蟒蛇”。作为命令头部的二进制可执行文件,可以在she-bang中工作,任何给定的she-bang都会被忽略,因为命令可执行文件始终受内核的首选。

示例:假设您有一个小python脚本,但是在shebang中有cat。设置脚本的可执行位并将其作为命令头调用时发生的情况是,系统首先读取第一行,剥离最初的两个字节并尝试执行(强制二进制)可执行文件并将其提供给脚本文件。

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

现在试试,看看自己在前面加上pythonpython2和/或python3

琐事:翻译可能选择再次处理shebang,单独处理。例如。 perl用于尊重-w之类的任何标志,无论它是在shebang上还是在命令上给出,无论是否为perl都是命令头。