Ich möchte eine Datei aus einem Python-Skript erstellen, das ausführbar ist.
import os
import stat
os.chmod('somefile', stat.S_IEXEC)
Es scheint os.chmod
, dass Berechtigungen nicht wie bei Unix hinzugefügt werden chmod
. Wenn die letzte Zeile auskommentiert ist, hat die Datei den Dateimodus -rw-r--r--
, wenn sie nicht auskommentiert ist , ist der Dateimodus ---x------
. Wie kann ich nur die hinzufügenu+x
Flag während der Rest der Modi intakt bleibt?
STAT_OWNER_EXECUTABLE = stat.S_IEXEC
und die vom Menschen lesbare lokale Konstante anstelle der Kauderwelschkonstante verwenden.Für Tools, die ausführbare Dateien generieren (z. B. Skripte), kann der folgende Code hilfreich sein:
Dies macht es (mehr oder weniger) respektieren die
umask
, was beim Erstellen der Datei gültig war: Die ausführbare Datei ist nur für diejenigen festgelegt, die lesen können.Verwendung:
quelle
0444
würden Sie verwenden0o444
. Oder wenn Sie beide unterstützen möchten, schreiben Sie einfach292
.Wenn Sie die gewünschten Berechtigungen kennen, können Sie dies anhand des folgenden Beispiels einfach halten.
Python 2:
Python 3:
Kompatibel mit beiden (Oktalumwandlung):
Beispiele für Referenzberechtigungen
quelle
Sie können dies auch tun
Aktuelle Auflistung der Datei
Mach das jetzt.
und Sie werden dies im Terminal sehen.
Sie können bitweise oder mit 0o111 alles ausführbar machen, 0o222 alles beschreibbar machen und 0o444 alles lesbar machen.
quelle
Respekt
umask
wiechmod +x
man chmod
sagt, wennaugo
nicht wie in gegeben ist:dann
a
wird aber mit verwendetumask
:Hier ist eine Version, die dieses Verhalten genau simuliert:
Siehe auch: Wie kann ich die Standarddateiberechtigungen in Python erhalten?
Getestet in Ubuntu 16.04, Python 3.5.2.
quelle
In Python3:
Denken Sie daran, das
0o
Präfix hinzuzufügen, da Berechtigungen als oktale Ganzzahl festgelegt sind und Python jede Ganzzahl mit einer führenden Null automatisch als oktal behandelt. Ansonsten gehen Sieos.chmod("somefile", 1230)
tatsächlich vorbei , was oktal von ist664
.quelle
chmod +
wie von OP gefordert, wodurch vorhandene Berechtigungen um neue erweitert werden sollten.Wenn Sie Python 3.4+ verwenden, können Sie die praktische Pfadlib der Standardbibliothek verwenden .
Die Path- Klasse verfügt über integrierte chmod- und stat- Methoden.
quelle