Dateirechte ermitteln & 755 -> rwxr-xr-x ???

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.
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 11. Februar 2008, 11:15

Gibt es eigentlich eine einfache Möglichkeit zu ermitteln, ob man die richtigen Rechte besitzt um Dateioperation XY machen zu können?
Oder müßte ich das zu Fuss per os.stat() herrausfinden?
Zuletzt geändert von jens am Montag 11. Februar 2008, 20:07, insgesamt 1-mal geändert.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Montag 11. Februar 2008, 11:22

Hoi Jens,

Hilft Dir os.access weiter? Oder möchtest Du doch was Anderes erfahren?

Gruß,
Christian
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 11. Februar 2008, 11:42

Ja, das sieht schon mal nicht schlecht aus, dank dir ;)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 11. Februar 2008, 12:45

Existiert eigentlich irgendwo eine Routine um os.stat()[stat.ST_MODE] von Oktalnotation auf Symbolische Notation umzuformen ?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 11. Februar 2008, 14:56

Also ich hab nun lange rumgesucht, aber nichts in der Richtung gefunden :(
Kennt jemand eine Routine dafür?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Montag 11. Februar 2008, 17:54

Ich nicht. Wenn niemand eine Alternative weiß: Selber rechnen oder os.access mehrmals aufrufen, um die vollständige Info zu erhalten.

Gruß,
Christian
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 11. Februar 2008, 19:02

Also ich kann mir einfach nicht vorstellen, das es nicht schon irgendjemand mal implementiert hat... Aber nach nochmaligem suchen hab ich immer noch keinen Ansatz gefunden :(

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 11. Februar 2008, 19:40

Was ist die "Symbolische Notation"?
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 11. Februar 2008, 19:43


CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Montag 11. Februar 2008, 19:44

Z. B. -rwxr-xr-x für 755.

edit: zu langsam
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 11. Februar 2008, 20:59

Halbgare rekursive Lösung (die nicht mit Sticky-Bit etc- funktioniert):

Code: Alles auswählen

def o2s_recurse(octal):
    values = ['---', '--x', '-w-', '-wx', 'r--', 'r-x', 'rw-', 'rwx']
    last_bit = octal % 8
    symbolic = []
    if octal / 8 != 0:
        symbolic.extend(o2s_recurse(octal / 8))
    symbolic.append(values[last_bit])
    return symbolic

def o2s(octal):
    value = ''.join(o2s_recurse(octal))
    fill = 9 - len(value)
    return fill * '-' + value
    
print o2s(0764)
print o2s(0000)
Wenn man die einzelnen Stellen etwa 7 in 1, 2, und 4 zerlegen könnte, wäre das alles einfacher und schöner zu implementieren.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
rafael
User
Beiträge: 189
Registriert: Mittwoch 26. Juli 2006, 16:13

Montag 11. Februar 2008, 21:17

Die einfache Methode: http://paste.pocoo.org/show/27137/
Leonidas hat geschrieben: Wenn man die einzelnen Stellen etwa 7 in 1, 2, und 4 zerlegen könnte, wäre das alles einfacher und schöner zu implementieren.
Jap, hab ich auch schon dran rumgeknobelt.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Montag 11. Februar 2008, 21:43

Code: Alles auswählen

print ''.join(d if c=='1' else '-' for (c,d) in zip(bin(octal), 'rwxrwxrwx'))
bin() halt geeignet implementieren oder Py3k benutzen :D
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 11. Februar 2008, 22:03

rafael hat geschrieben:Die einfache Methode: http://paste.pocoo.org/show/27137/
Das sieht gut aus, aber warum kein dict nutzten? Werde ich morgen mal umschreiben...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 11. Februar 2008, 23:26

jens hat geschrieben:
rafael hat geschrieben:Die einfache Methode: http://paste.pocoo.org/show/27137/
Das sieht gut aus, aber warum kein dict nutzten?
Und noch dazu iterativ? Das geht ja mal gar nicht :P

rafael, willst du uns mit der Reihenfolge 4, 2, 6, 1, 5, 3, 7 irgendwas mitteilen ;)

Außerdem fehlen uns ja noch so Juwelen wie Set UID, Set GUID und Sticky-Bit (jeweils +4, +2 und +1 dazurechnen). Die Regeln dafür sind Klasse: aus rwx wird mit +s ein rws, aus rw- wird rwS und das gleiche gibts mit dem Sticky-Bit noch mal mit dem Buchstaben T. 8)

Edit: birkenfeld, cool. Das ist mal was nicht-langweiliges :idea:
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten