<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
這個問題描述起來有點違反直覺,要執行一個檔案難道不應該需要可執行許可權嗎?讓我們先來看一個例子:
# 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檔案內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45