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: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

Beitragvon jens » 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:

Beitragvon CM » 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: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » 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: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » 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: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » 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:

Beitragvon CM » 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: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » 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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » 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: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » 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:

Beitragvon CM » Montag 11. Februar 2008, 19:44

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

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

Beitragvon Leonidas » 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

Beitragvon rafael » 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

Beitragvon birkenfeld » 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: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » 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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » 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

Wer ist online?

Mitglieder in diesem Forum: Sirius3