Bekomme bei "os.getlogin()" ein "[Errno 22] Invalid argument" :K
Wie kann das sein?
System: 2.6.26-2-xen-amd64, Python v2.5.2
EDIT: Das ganze funktioniert auf Konsole, aber nicht in der web Anwendung auf dem selben Server...
os.getlogin() -> [Errno 22] Invalid argument
@jens: Vielleicht hat der Webserver beziehungsweise der Benutzer unter dem das läuft nicht die nötigen Rechte auf /var/run/utmp zuzugreifen? Oder er hat sich gar nicht "eingeloggt", sprich er hat gar kein (Pseudo)Terminal zugeordnet!?
Also die Doku von der C-Funktion `getlogin()` legt die Umgebungsvariable `$LOGNAME` nahe.
So sieht die Implementierung davon übrigens aus:
Code: Alles auswählen
def getuser():
"""Get the username from the environment or password database.
First try various environment variables, then the password
database. This works on Windows as long as USERNAME is set.
"""
import os
for name in ('LOGNAME', 'USER', 'LNAME', 'USERNAME'):
user = os.environ.get(name)
if user:
return user
# If this fails, the exception will "explain" why
import pwd
return pwd.getpwuid(os.getuid())[0]
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Warum brauchst du das denn? Ggf. sollte man die Wahl des Users nicht unbedingt unter den Tisch fallen lassen.
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
@jens: Was zum Beispiel ein Vorteil davon sein kann. Die Frage ist, wer kann das wo manipulieren und ist das ein Problem. Die Umgebungsvariable der laufenden Web-Anwendung wird man von aussen ja zum Beispiel nicht so einfach ändern können.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Das ganze ist nicht's kritisches.
Ich brauche den Usernamen für: http://github.com/jedie/PyLucid-system- ... ion-plugin
Er wird für subprocess verwendet:
Ich brauche den Usernamen für: http://github.com/jedie/PyLucid-system- ... ion-plugin
Er wird für subprocess verwendet:
Code: Alles auswählen
cmd = ["/usr/bin/top", "-bn1", "-U%s" % username]
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Und wo ist das Problem, wenn es manipuliert wird? Deine Lösung kann man übrigens auch manipulieren, wenn man mit LD_PRELOAD eine andere libc einbindet.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice