Wie die zur Verwendung von os.umask() in Python
Ich versuche mit einer umask mit dem os-Modul. Bitte beachten Sie auch meine normalen umask festlegen, in meiner ~/.Profil ist umask 0027.
In einer bash-shell,
umask 0022
ermöglichen wird eine Datei erstellt mit Berechtigungen
-rw-r--r--
Jedoch als us-import das os-Modul und tun Sie dies:
os.umask(0022)
[do some other code here that creates a file]
Ich bekomme die Berechtigungen der
----------
Erste, wie bekomme ich os.umask(mask) Verhalten sich wie die umask in der shell?
Zweitens, was ist die Logik zwischen den Unterschied von den beiden?
Anmerkung: ich habe versucht, die Umwandlung der 0022-zu-dezimal-in Fall ist es zu erwarten, ein dezimal-by-doing:
os.umask(18)
aber es gab Berechtigungen
-----w--w-
Beachten Sie auch, versuchte ich
os.umask(00022)
und
os.mask(0o0022)
Das hat nicht funktioniert entweder.
- Ist es möglich die Datei bereits vorhanden ist? Sie müssen mit chmod statt in diesem Fall
- Nein, es wurde gelöscht, bevor die hand, aber das ist ein guter Gedanke.
- Vazquez-Abrams: der Versuch, die Einstellung umask 0027 in die shell zuerst, dann führen Sie das Skript aufrufen oder Ihr Dolmetscher.
- Vazquez-Abrams: ur right, weder konnte ich mit einem einfachen test python-Programm, das getrennt von meiner code. Seltsam, denn ich verwende die gleichen Techniken.
- wenn jemand will, um zu sehen, den code, tun "git clone git://git.code.sf.net/p/createlauncher/code createlauncher-code" und Blick auf die file_handler.py Modul und das main-Programm create_launcher.py. Die main site ist sourceforge.net/projects/createlauncher
- verwenden Sie nicht den master branch, verwenden Sie die fix_other_buttons Zweig
- fix_other_branch jetzt zusammengeführt master. Verwenden Sie den master-branch-version erstellen-launcher-0.1.4+alpha-commit-hash db099a
- Mit
old_mask = os.umask(0o000)
und dannos.makedirs(./foo/bar)
Verzeichnisse erstellen mit777
als erwartet. Undoct(old_mask)
gibt022
die richtige (Standard-umask unter Unix). - Verwandte: stackoverflow.com/questions/15607903/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Missverständnis von umask, denke ich.
Die umask legt die Standard - Dementis, nicht die Standard - Berechtigungen.
So
sollte in der Tat die Erstellung von Dateien wie folgt vor:
Umask 022 entfernt, die Schreibrechte für Gruppe und andere, und das ist genau das Verhalten, wir sehen es.
Ich finde, es hilft, zurück zu gehen, um die Binärdatei, die oktale zahlen darstellen:
Das Programm so verhält, wie Sie es gefragt zu haben, nicht notwendigerweise als Sie dachte, es sollte. Häufig auftretende situation, dass, mit Computern 🙂
umask 022
führen sollte755
Berechtigungen für Verzeichnisse, nicht jedoch für Dateien. Für Dateien sollte es644
. Oder in anderen Worten, mitumask 022
Verzeichnisse solltenrwxr-xr-x
, aber die Dateien werden sollterw-r--r--
.Werden Sie wahrscheinlich benötigen, um uns zu zeigen, den code darstellt:
Den code, den Sie haben, funktioniert gut auf meinem system:
produzieren-Dateien wie folgt:
Beachten Sie auch die Wiederherstellung der alten
umask
Wert minimiert die Auswirkungen der änderung der lokalen Betrieb.Wie Sie sehen können aus den oben genannten Ergebnissen, die Sie auch brauchen, um bewusst sein, dass die
umask
Wert "subtrahiert" von der mode, die Sie verwenden um die Datei zu erstellen und wir wissen nicht, was dieser Modus in Ihrem Fall zu.Das ist offensichtlich auch in Ihrem
bash
Probe, da einumask
Wert von022
beim erstellen eines Datei-Modus777
führen würder-xr-xr-x
, nichtrw-r--r--
wie Sie es haben.Basierend auf Ihre Kommentare unten, wo Sie angeben, die Sie verwenden
open
eher alsos.open
, ein flüchtiger Blick von der Python-source-scheint zu zeigen, dass dies übersetzt in eine Cfopen
nennen, die verwendet0666
wie die erste mode. Unterstützt wird dies durch die leicht geänderte code:gibt uns:
So, ich bin mir nicht ganz sicher, warum Sie immer
0000
Berechtigungen in Ihrem Fall.Wäre es sehenswert, was die Ergebnisse sind, wenn Sie führen Sie das obige Programm in Ihrem Umgebung. Wenn es das gleiche wie ich bekommen, dann kann das problem auch woanders liegen.
touch
hat verschiedene Regeln, sagen,ld
im Hinblick auf die mode, die es verwendet. Alles was ich sagte, ist, dass die Berechtigungen der Datei sind dieumask
Wert und der Modus und der fehlende code ist das bit, die würden uns sagen, die mode.Pingelig/vorsichtig, und Python 3k-kompatibel, hier ist meine etwas andere Antwort (das erklärt immer noch nicht, was die OP ' s ursprüngliche Frage war):
Obwohl dies scheint zu sein, ein gerades system call, in diesem Fall, es scheint egal, was die Python-version, die Sie verwenden:
Scheint es, dass os.öffnen Sie die Griffe der bereits bestehenden umask anders in Python 2.x und Python 3.x, möglicherweise auch, weil die 2.x ist näher an der OS und 3.x sieht ein bisschen mehr Abstraktion.
https://docs.python.org/2/library/os.html
"Der Standard-Modus ist 0777 (Oktalzahl), und den aktuellen umask-Wert wird zunächst ausgeblendet."
Gibt es keine ähnliche Aussage in https://docs.python.org/3/library/os.html