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

Besitzer einer Datei ermitteln

Beitragvon mferner » Dienstag 23. September 2008, 14:49

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

Beitragvon lunar » Dienstag 23. September 2008, 14:54

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:

Beitragvon name » Dienstag 23. September 2008, 14:54

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

Problem gelöst

Beitragvon mferner » Mittwoch 24. September 2008, 14:50

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
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Beitragvon cofi » Mittwoch 24. September 2008, 15:28

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

Beitragvon BlackJack » Mittwoch 24. September 2008, 15:50

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

Beitragvon lunar » Mittwoch 24. September 2008, 16:21

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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder