Seite 1 von 1

Besitzer einer Datei ermitteln

Verfasst: Dienstag 23. September 2008, 14:49
von mferner
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?

Verfasst: Dienstag 23. September 2008, 14:54
von 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.

Verfasst: Dienstag 23. September 2008, 14:54
von name
os.stat koennte helfen.

Problem gelöst

Verfasst: Mittwoch 24. September 2008, 14:50
von mferner
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.

Verfasst: Mittwoch 24. September 2008, 15:28
von cofi
Zum interpretieren der `os.stat'-Ausgabe gibts auch noch das stat-Modul

Verfasst: Mittwoch 24. September 2008, 15:50
von 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.

Verfasst: Mittwoch 24. September 2008, 16:21
von 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.