Heim  >  Artikel  >  Backend-Entwicklung  >  Muss ich beim Ausführen eines Python-Skripts ausführbare Berechtigungen hinzufügen?

Muss ich beim Ausführen eines Python-Skripts ausführbare Berechtigungen hinzufügen?

王林
王林nach vorne
2023-04-26 18:19:081498Durchsuche

Fallanalyse

Die Beschreibung dieses Problems ist etwas kontraintuitiv. Sollten zum Ausführen einer Datei keine ausführbaren Berechtigungen erforderlich sein? Schauen wir uns zunächst ein Beispiel an:

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

Dies ist eine Datei mit dem Namen module1.py. Diese Datei hat nur Leseberechtigungen:

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

Wir können Python direkt verwenden, um diese Datei auszuführen:

[dechin@dechin-manjaro excute]$ python3 module1.py
Hallo Welt!

Wir haben gefunden dass diese Datei auch dann ausgeführt werden kann, wenn sie nur über Leserechte verfügt. Zur strengen Überprüfung erstellen wir hier einen weiteren Testmodus, um die Python-Datei durch Import zu importieren. Erfordert es keine ausführbaren Berechtigungen?

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

In ähnlicher Weise erhält unsere neu erstellte Datei keine ausführbaren Berechtigungen:

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

Lassen Sie uns die Datei module2.py ausführen:

[dechin@dechin-manjaro excute ]$ python3 module2. py
Hallo Welt!

Dann ist unser Test abgeschlossen. Für die Ausführung gewöhnlicher py-Dateien sind keine ausführbaren Berechtigungen erforderlich, was bestimmte Einschränkungen für unsere Berechtigungsminimierung mit sich bringt.

Erklärung des Prinzips

Der Autor cedbeu beschreibt es so: Python selbst übernimmt die Rolle eines Sprachparsers. Die tatsächlich ausgeführte py-Datei ist Python und nicht vom Benutzer erstellt. Selbst wenn die ausführbaren Berechtigungen der Py-Datei entfernt werden, kann die Py-Datei daher weiterhin über Python ausgeführt werden. Wenn wir jedoch die ausführbaren Berechtigungen von Python entfernen, können wir diese Aufgabe nicht normal ausführen.

Erweiterter Test

Wenn die PY-Datei in Dateien im Pyc- und Pyo-Format kompiliert wird, sind für die Aufgabenausführung zu diesem Zeitpunkt ausführbare Berechtigungen erforderlich? Testen Sie zuerst die Pyc-Datei:

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

Nachdem wir die Kompilierung ausgeführt haben, finden wir im aktuellen Verzeichnis einen Ordner __pycache__, den kompilierten pyc Die Dateien sind in diesem Verzeichnis gespeichert:

[dechin@dechin-manjaro excute]$ tree
.
├── module1.py
├── module2.py
└── __pycache__
└── module1.cpython- 38.pyc

1 Verzeichnis, 3 Dateien
[dechin@dechin-manjaro excute]$ cd __pycache__/
[dechin@dechin-manjaro __pycache__]$ ll
Gesamtnutzung 4
-rw-r--r-- 1 dechin dechin 259. Januar 15 18:01 module1.cpython-38.pyc

Hier sehen wir, dass der Dateiname der Pyc-Datei ein festes Suffix hat und es auch keine ausführbare Berechtigung gibt. Hier verwenden wir denselben Befehl, um die Pyc-Datei auszuführen :

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

Hier können wir sehen, ob die Pyc-Datei direkt ausgeführt oder in Modul1 umbenannt wird Über module2.py kann es normal ausgeführt werden und verfügt nicht über ausführbare Berechtigungen. Als nächstes versuchen wir es noch einmal mit der Pyo-Datei:

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

Führen Sie die Pyc-Datei mit opt ​​aus:

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

Ebenso kann es auch ohne ausführbare Berechtigungen normal ausgeführt werden.

Technisches Easter Egg

Auch wenn wir die Pyc-Datei zwangsweise in eine Py-Datei umbenennen, hat dies keinen Einfluss auf die Aufgabenausführung:

[dechin@dechin-manjaro __pycache__]$ cp module1.cpython-38.opt-1 .pyc module1 .py
[dechin@dechin-manjaro __pycache__]$ ll
Gesamtnutzung 20
-rw-r--r-- 1 dechin dechin 259 15. Januar 18:17 module1.cpython-38.opt-1.pyc
- r--r--r-- 1 dechin dechin 259 15. Januar 18:01 module1.cpython-38.pyc
-rw-r--r-- 1 dechin dechin 259 15. Januar 18:20 module1.py
-rw-r--r-- 1 dechin dechin 259 15. Januar 18:13 module1.pyc
-r--r--r-- 1 dechin dechin 64 15. Januar 18:09 module2.py
[dechin@ dechin- manjaro __pycache__]$ python3 module1.py
Hallo Welt!

Das obige ist der detaillierte Inhalt vonMuss ich beim Ausführen eines Python-Skripts ausführbare Berechtigungen hinzufügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen