mode-Parameter für os.chmod ist mir unklar...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Hallo,

in der Doku zu 'os.chmod' steht unter anderem:
"Change the mode of path to the numeric mode."

Wenn ich nun, wie ich das von 'chmod' gewohnt bin, als 'mode' eine 4-stellige Zahlenfolge übergebe, werden die Rechte auch wie erwartet gesetzt.

Allerdings ist mir jetzt nicht klar, wie eine Zahl, die mit 0 beginnt, von Python interpretiert wird.

Code: Alles auswählen

In [122]: 0644
Out[122]: 420

In [123]: 644
Out[123]: 644
Wenn ich 0644 übergebe, was kommt denn nun bei 'os.chmod' an? 420, 644 oder 0-6-4-4?

Aber für mich am wichtigsten: Ist es richtig, als mode-Parameter eine Zahlenfolge, wie man sie auch unter Linux verwendet, zu übergeben?

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Das, was bei deinen Versuchen bei "Out:" rauskommt, ist auch das, was bei `chmod()` ankommt. Da steckt keine spezielle "`chmod()`-Magie" hinter. ;)
BlackJack

@mutetella: Zahlenliterale die mit 0 beginnen werden von Python als Oktalzahl interpretiert. 0644 und 420 haben den gleichen Wert — die Frage was davon jetzt bei `os.chmod` ankommt stellt sich also nicht. Man könnte das auch als ``0x1a4`` oder ``86 * 5`` schreiben. Es ist halt eine Zahl und bei den Beispielen immer die Gleiche.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Und wenn du nicht so recht weißt, was du dort einsetzen sollst, dann halte dich am besten an die Doku und nutze die Konstanten aus dem `stat`-Modul in Kombination mit dem `|`-Operator. Dürfte auch wesentlich lesbarer sein. ;)
lunar

@snafu: Ob "stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH" jetzt wirklich so viel lesbarer ist als "0o644" ...
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

snafu hat geschrieben:Und wenn du nicht so recht weißt, was du dort einsetzen sollst, dann halte dich am besten an die Doku und nutze die Konstanten aus dem `stat`-Modul in Kombination mit dem `|`-Operator.
Mitunter deshalb entstand meine Frage, weil ich eben erstmal versucht habe, ein in meinen Augen lesbareres 0644 zu übergeben anstatt 4 schwer zu deutende Konstanten.
Aber wie so oft: Hier ist es wohl eine Frage der Gewohnheit...

Danke für Eure Erklärung, ich bleibe dann bei meiner linuxgewohnten Schreibweise.

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

lunar hat geschrieben:@snafu: Ob "stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH" jetzt wirklich so viel lesbarer ist als "0o644" ...
Ja gut, ok. Wenn ein Leser sich nicht mit der Materie auskennt, sind wahrscheinlich beide Schreibweisen erstmal böhmische Dörfer. Die Bezeichnungen sind leider doch sehr kryptisch gewählt worden. Auf der anderen Seite lässt sich aber mittels Suchmaschine recht schnell die Bedeutung von S_IWUSR usw erkennen anstatt, dass man da nach der Zahl suchen müsste. Ist aber sicher Geschmackssache.
Antworten