Verwendung von os.umask () in Python

8

Ich versuche, eine Umask mithilfe des os-Moduls einzurichten. Bitte beachten Sie, dass meine normale Umask in meinem ~ / .profile umask 0027 ist.

In einer Bash-Shell

%Vor%

ermöglicht das Erstellen einer Datei mit Berechtigungen

%Vor%

Wenn wir jedoch das os-Modul importieren und dies tun:

%Vor%

Ich erhalte die Berechtigungen von

%Vor%

Erstens: Wie mache ich os.umask (Maske) in der Shell wie umask?

Zweitens, was ist die Logik zwischen dem Unterschied der beiden?

Hinweis: Ich habe versucht, das 0022 in Dezimal umzuwandeln, falls es eine Dezimalzahl erwartet, indem ich Folgendes tue:

%Vor%

aber es gab Berechtigungen von

%Vor%

Beachte auch, ich habe es versucht

%Vor%

und

%Vor%

Was auch nicht funktioniert hat.

    
narnie 24.04.2012, 02:48
quelle

4 Antworten

8

Sie müssen uns wahrscheinlich den Code zeigen, der Folgendes darstellt:

%Vor%

Der Code, den Sie haben, funktioniert gut auf meinem System:

%Vor%

Erstellen von Dateien wie folgt:

%Vor%

Sie sollten auch die Wiederherstellung des alten umask -Werts beachten, der die Auswirkung der Änderung auf die lokale Operation minimiert.

Wie Sie aus den obigen Ergebnissen sehen können, müssen Sie sich auch darüber im Klaren sein, dass der umask -Wert von dem Modus subtrahiert wird, den Sie zum Erstellen der Datei verwenden, und wir wissen nicht, in welchem ​​Modus er sich befindet Ihr besonderer Fall.

Das ist selbst in Ihrem bash -Beispiel offensichtlich, da ein umask -Wert von 022 beim Erstellen einer Datei mit dem Modus 777 zu r-xr-xr-x und nicht zu rw-r--r-- führen würde, wie Sie es haben.

Basierend auf Ihren Kommentaren unten, wo Sie angeben, dass Sie open anstatt os.open verwenden, scheint ein flüchtiger Blick auf die Python-Quelle darauf hinzuweisen, dass dies zu einem C fopen -Aufruf führt, der 0666 as verwendet der Anfangsmodus. Dies wird durch den leicht modifizierten Code unterstützt:

%Vor%

was uns gibt:

%Vor%

Ich bin mir also nicht ganz sicher, warum Sie in Ihrem Fall 0000 -Berechtigungen bekommen.

Es wäre sehenswert, was die Ergebnisse sind, wenn Sie dieses Programm in Ihrer Umgebung ausführen. Wenn es das gleiche ist, wie ich es habe, könnte das Problem auch woanders liegen.

    
paxdiablo 24.04.2012 02:57
quelle
6

Missverständnis von umask, denke ich. Die Umask legt die standardmäßigen Dementis fest und nicht die standardmäßigen Berechtigungen . Also

%Vor%

sollte tatsächlich Dateien wie folgt erzeugen:

%Vor%

Die Umask 022 entfernt Schreibzugriff für Gruppen und andere, was genau das Verhalten ist, das wir dort sehen. Ich finde es hilfreich, zu der Binärzahl zurückzukehren, die die Oktalzahlen darstellen:

%Vor%

Das Programm verhält sich so, wie Sie es verlangt haben, nicht unbedingt, wie Sie es sich vorgestellt haben. Gemeinsame Situation, dass mit Computern: -)

    
JimH44 23.04.2015 23:22
quelle
5

Sei wählerisch / vorsichtig und Python 3k-kompatibel, hier ist meine etwas andere Antwort (die immer noch nicht erklärt, was das ursprüngliche Problem des OP war):

%Vor%     
George Lund 07.12.2012 12:26
quelle
0

Auch wenn dies ein direkter Systemaufruf zu sein scheint, scheint es in diesem Fall wichtig zu sein, welche Python-Version Sie verwenden:

Offenbar behandelt os.open die bereits vorhandene Umask anders in Python 2.x und Python 3.x, möglicherweise weil 2.x näher am Betriebssystem ist und 3.x etwas mehr Abstraktion macht.

>

Ссылка "Der Standardmodus ist 0777 (oktal) und der aktuelle Umask-Wert wird zuerst ausgeblendet. "

Es gibt keine ähnliche Aussage in Ссылка

    
Jamieson Becker 23.03.2016 19:16
quelle

Tags und Links