2016-03-08 96 views

回答

7

因爲你正在運行的是python script.py是python程序;然後,它加載並運行您在參數中指定的腳本,即script.py(基本上是一個文本文件)。腳本文件不需要是可執行文件,因爲這裏執行的是python解釋器(python二進制文件本身,顯然應該具有x權限)。

隨着.\script.py,你嘗試直接運行你的腳本(仍然是一樣的文本文件)作爲一個程序。當你這樣做時,你希望它用你在腳本代碼的第一行中指定的解釋器來解析,「shebang」例如#!/usr/bin/env python。如果未設置x權限,則操作系統不會嘗試「執行」您的文件(儘管它可能會嘗試使用默認程序在適用的情況下打開它),因此,它不會關心shebang。

+1

要了解更多關於這是如何工作的,尋找unix shebangs https://en.wikipedia.org/wiki/Shebang_%28Unix%29 – xvan

4

文件本身它解釋(讀)而不是在第一個例子中實際執行。 python應用程序是需要執行權限的。

在第二個示例中,文件本身正在執行,因此需要這些權限才能繼續。

2

當我們運行一個腳本python script.py我們實際調用Python解釋器,其大致位於/usr/bin/python(的which python輸出會告訴你確切位置)。

解釋器依次讀取腳本並執行其代碼。 有執行許可的翻譯器是

當以腳本形式執行./script.py時,腳本將直接執行,因此腳本需要執行權限。所使用的解釋器由shebang行指定。

當內核發現前兩個字節是#!時,它會使用該行的其餘部分作爲解釋器並將該文件作爲參數傳遞。請注意,爲此,該文件需要具有執行權限。在前一種情況下,我們間接地做什麼內核會做了,我們執行的腳本./script.py

總之通過方法1執行解釋需要只讀權限,但對於後來它需要執行它直接

相關問題