91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python執行py文件需要可執行權限嗎

發布時間:2023-03-13 16:54:53 來源:億速云 閱讀:115 作者:iii 欄目:開發技術

這篇文章主要講解了“Python執行py文件需要可執行權限嗎”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python執行py文件需要可執行權限嗎”吧!

案例解析

這個問題描述起來有點違反直覺,要執行一個文件難道不應該需要可執行權限嗎?讓我們先來看一個例子:

# module1.py
def test():
    print ('hello world!')
 
if __name__ == '__main__':
    test()

這是一個名為module1.py的文件,這個文件僅有可讀權限:

[dechin@dechin-manjaro excute]$ ll
-r--r--r-- 1 dechin dechin   78  1月 15 17:06 module1.py

我們可以直接用python來運行一下這個文件:

[dechin@dechin-manjaro excute]$ python3 module1.py 
hello world!

我們發現即使只有可讀權限,這個文件也是可以運行的。為了嚴格驗證,我們這里創建另外一種模式的測試,通過import來導入python文件,是否也不需要可執行權限呢?

# module2.py
from module1 import test
 
if __name__ == '__main__':
    test()

同樣的,我們新建的文件也未賦予可執行權限:

[dechin@dechin-manjaro excute]$ ll
-r--r--r-- 1 dechin dechin   78  1月 15 17:06 module1.py
-r--r--r-- 1 dechin dechin   64  1月 15 17:44 module2.py

我們執行一下module2.py這個文件:

[dechin@dechin-manjaro excute]$ python3 module2.py 
hello world!

那么我們的測試就完成了,經過驗證,執行普通的py文件是不需要可執行權限的,這對我們的權限最小化約束就產生了一定的啟發作用。

原理解釋

在stackoverrun上面有一條回復,作者cedbeu是這樣描述的:python本身承擔了語言解析器的角色,py文件不過是一個文本文件,真正執行的二進制文件是python而不是用戶所創建的py文件。因此,即使去掉py文件的可執行權限,該py文件也是可以通過python來執行的。但是,如果我們去掉了python的可執行權限,那就無法正常執行這一條任務了。

擴展測試

如果將py文件編譯成pyc和pyo格式的文件,此時的任務執行是否需要可執行權限呢?首先測試pyc文件:

[dechin@dechin-manjaro excute]$ python3 -m py_compile module1.py

執行完編譯,我們會在當前目錄下發現一個__pycache__的文件夾,編譯好的pyc文件就存儲在這個目錄下:

[dechin@dechin-manjaro excute]$ tree
.
├── module1.py
├── module2.py
└── __pycache__
    └── module1.cpython-38.pyc
 
1 directory, 3 files
[dechin@dechin-manjaro excute]$ cd __pycache__/
[dechin@dechin-manjaro __pycache__]$ ll
總用量 4
-rw-r--r-- 1 dechin dechin 259  1月 15 18:01 module1.cpython-38.pyc

這里我們看到pyc文件的文件名會固定有個后綴,同樣也沒有可執行權限,這里我們用同樣的命令來執行pyc文件:

[dechin@dechin-manjaro __pycache__]$ ll
-r--r--r-- 1 dechin dechin 259  1月 15 18:01 module1.cpython-38.pyc
-rw-r--r-- 1 dechin dechin 259  1月 15 18:13 module1.pyc
-r--r--r-- 1 dechin dechin  64  1月 15 18:09 module2.py
[dechin@dechin-manjaro __pycache__]$ python3 module1.cpython-38.pyc 
hello world!
[dechin@dechin-manjaro __pycache__]$ python3 module2.py 
hello world!

這里我們可以發現,不論是直接執行pyc文件,或者是改名為module1.pyc之后再通過module2.py導入的方式,都可以正常的被執行,而且都不具有可執行權限。接下來我們再嘗試一下pyo文件:

[dechin@dechin-manjaro excute]$ python3 -O -m py_compile module1.py 

執行帶有opt的pyc文件:

[dechin@dechin-manjaro __pycache__]$ python3 module1.cpython-38.opt-1.pyc 
hello world!

同樣的,都可以正常的被執行,即使沒有可執行權限。

技術彩蛋

即使我們把pyc文件強行改名為py文件,同樣也是不影響任務執行的:

[dechin@dechin-manjaro __pycache__]$ cp module1.cpython-38.opt-1.pyc module1.py
[dechin@dechin-manjaro __pycache__]$ ll
總用量 20
-rw-r--r-- 1 dechin dechin 259  1月 15 18:17 module1.cpython-38.opt-1.pyc
-r--r--r-- 1 dechin dechin 259  1月 15 18:01 module1.cpython-38.pyc
-rw-r--r-- 1 dechin dechin 259  1月 15 18:20 module1.py
-rw-r--r-- 1 dechin dechin 259  1月 15 18:13 module1.pyc
-r--r--r-- 1 dechin dechin  64  1月 15 18:09 module2.py
[dechin@dechin-manjaro __pycache__]$ python3 module1.py
hello world!

感謝各位的閱讀,以上就是“Python執行py文件需要可執行權限嗎”的內容了,經過本文的學習后,相信大家對Python執行py文件需要可執行權限嗎這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浙江省| 隆林| 富民县| 天津市| 如东县| 广饶县| 东明县| 南雄市| 乐陵市| 慈溪市| 乌恰县| 浏阳市| 呼伦贝尔市| 万源市| 溧阳市| 隆子县| 尚志市| 九龙县| 清水河县| 黔东| 婺源县| 营山县| 志丹县| 根河市| 安陆市| 昭觉县| 桂平市| 萨迦县| 通许县| 武穴市| 永定县| 安义县| 太仆寺旗| 康平县| 米林县| 梓潼县| 沅陵县| 普陀区| 民勤县| 松滋市| 安平县|