執行Python腳本時是否需要新增可執行權限?
案例解析
這個問題描述起來有點違反直覺,要執行一個檔案不應該需要可執行權限嗎?讓我們先來看一個例子:
1 2 3 4 5 6 |
|
這是一個名為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 |
|
相同的,我們新建的檔案也未賦予可執行權限:
#[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那麼我們的測試就完成了,經過驗證,執行普通的py檔案是不需要可執行權限的,這對我們的權限最小化約束就產生了一定的啟發作用。 原理解釋在stackoverrun上面有一條回复,作者cedbeu是這樣描述的:python本身承擔了語言解析器的角色,py文件不過是一個文本文件,真正執行的二進制檔案是python而不是使用者所建立的py檔案。因此,即使去掉py檔案的可執行權限,該py檔案也是可以透過python來執行的。但是,如果我們去掉了python的可執行權限,那就無法正常執行這條任務了。 擴充測試hello world!
├── 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!#### ##如果將py檔案編譯成pyc和pyo格式的文件,此時的任務執行是否需要可執行權限呢?首先測試pyc檔案:
.
[dechin@dechin-manjaro excute]$ python3 -m py_compile module1.py
執行完編譯,我們會在目前目錄下發現一個__pycache__的資料夾,編譯好的pyc檔就儲存在這個目錄下:
[dechin@dechin-manjaro excute]$ tree
以上是執行Python腳本時是否需要新增可執行權限?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

在 Sublime Text 中運行 Python 代碼,需先安裝 Python 插件,再創建 .py 文件並編寫代碼,最後按 Ctrl B 運行代碼,輸出會在控制台中顯示。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

在 Notepad 中運行 Python 代碼需要安裝 Python 可執行文件和 NppExec 插件。安裝 Python 並為其添加 PATH 後,在 NppExec 插件中配置命令為“python”、參數為“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通過快捷鍵“F6”運行 Python 代碼。
