目錄
案例解析
首頁 後端開發 Python教學 執行Python腳本時是否需要新增可執行權限?

執行Python腳本時是否需要新增可執行權限?

Apr 26, 2023 pm 06:19 PM
python

案例解析

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

1

2

3

4

5

6

# 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文件,是否也不需要可執行權限呢?

1

2

3

4

5

# 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腳本時是否需要新增可執行權限?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

兩個點博物館:邦格荒地地點指南
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

兩個點博物館:邦格荒地地點指南
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

怎麼下載deepseek 小米 怎麼下載deepseek 小米 Feb 19, 2025 pm 05:27 PM

怎麼下載deepseek 小米

模板化的優點和缺點有哪些? 模板化的優點和缺點有哪些? May 08, 2024 pm 03:51 PM

模板化的優點和缺點有哪些?

Google AI 為開發者發佈 Gemini 1.5 Pro 和 Gemma 2 Google AI 為開發者發佈 Gemini 1.5 Pro 和 Gemma 2 Jul 01, 2024 am 07:22 AM

Google AI 為開發者發佈 Gemini 1.5 Pro 和 Gemma 2

只要250美元,Hugging Face技術主管手把手教你微調Llama 3 只要250美元,Hugging Face技術主管手把手教你微調Llama 3 May 06, 2024 pm 03:52 PM

只要250美元,Hugging Face技術主管手把手教你微調Llama 3

分享幾個.NET開源的AI和LLM相關專案框架 分享幾個.NET開源的AI和LLM相關專案框架 May 06, 2024 pm 04:43 PM

分享幾個.NET開源的AI和LLM相關專案框架

golang 函數調試與分析的完整指南 golang 函數調試與分析的完整指南 May 06, 2024 pm 02:00 PM

golang 函數調試與分析的完整指南

deepseek怎麼問他 deepseek怎麼問他 Feb 19, 2025 pm 04:42 PM

deepseek怎麼問他

NET40是什麼軟體 NET40是什麼軟體 May 10, 2024 am 01:12 AM

NET40是什麼軟體

See all articles