Besitzer einer Datei ermitteln

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
mferner
User
Beiträge: 2
Registriert: Dienstag 23. September 2008, 14:39

Hallo,

ich möchte den Besitzer einer Datei unter Linux ermitteln. In der Shell geht das mit

stat -c %U Datei

Versuche ich

b=os.popen('stat -c \%U %s' % (a))

so erhalte ich bei Ausgabe von b

<open file 'stat -c %U unison.log', mode 'r' at 0x83378d8>

Wie Trunkiere ich %U richtig, oder kennt jemand eine andere Möglichkeit an den Besitzer einer Datei zu kommen?
lunar

Die Rückgabe ist ein Dateiobjekt, dass man erst lesen muss, um an die Daten zu kommen. Im Übrigen gibt es subprocess für Unterprozesse und os.stat, um Metainformationen wie den Eigentümer abzufragen.
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

os.stat koennte helfen.
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
mferner
User
Beiträge: 2
Registriert: Dienstag 23. September 2008, 14:39

Hallo,

vielen Dank für den Tipp. Das hat mich auf die Spur gebracht. Die Lösung ist:

filestat = os.lstat('file name')
fileuser = pwd.getpwuid(filestat.st_uid)[0]

Danach enthält fileuser den Klartextnamen des Benutzers.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Zum interpretieren der `os.stat'-Ausgabe gibts auch noch das stat-Modul
BlackJack

Wobei das ziemlich unlesbaren, sehr eng an C angelehnten Kram enthält und AFAIK alles lesbarer auch als Funktionen in `os.path` vorhanden ist.
lunar

Naja, nicht alles, os.path.getowner() gibts nicht ;)

Aber das "stat"-Modul benötigt man trotzdem nicht, weil die die Rückgabe von "os.stat" ein Objekt mit entsprechenden Attributen ist. Was im übrigen auch für die Rückgabe von pwd.getpwuid gilt, so dass man auf den "magischen" Index verzichten kann:

Code: Alles auswählen

def getowner(path):
    return pwd.getpwuid(os.lstat(path).st_uid).pw_name
Btw, bist du sicher, dass du wirklich "lstat" nutzen willst? Das gibt dir beim symbolischen Links nämlich den Eigentümer des Links und nicht den eigentlich relevanten Eigentümer der verlinkten Datei zurück.
Antworten