2017-05-04 139 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都是命令頭。