Systemvariable auslesen

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
halo23
User
Beiträge: 20
Registriert: Freitag 30. Oktober 2009, 08:01

Ich würde gerne den am System angemeldeteten Benutzer in einem Pythonskript verwenden.

Code: Alles auswählen

>>> import subprocess
>>> user = subprocess.Popen(["echo", "$USER"], stdout=subprocess.PIPE)
>>> user = user.stdout.read()
>>> print user
$USER
Allerdings bekomme ich die Systemvariable zurück und nicht deren Inhalt.

Was mache ich falsch?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Code: Alles auswählen

import os
os.environ["USER"]
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich würds wohl so angehen:

Code: Alles auswählen

In [8]: import os

In [9]: print os.environ["USER"]
------> print(os.environ["USER"])
nelson
halo23
User
Beiträge: 20
Registriert: Freitag 30. Oktober 2009, 08:01

Ah, Danke, da habe ich mal wieder zu kompliziert gedacht.

Wenn ich noch verstehen würde warum mein Versuch nicht funktioniert, dann wäre ich rundum zufrieden.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

In dem Aufruf ist keine Shell eingebunden - erst die Shell loest `$USER` auf, dafuer brauchst du ein `shell=True`, allerdings funktionierte das in meinen Tests auch nicht.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Also für den Usernamen tät ich ja ``getpass.getuser()`` verwenden, das ist IMHO etwas sinnvoller als aus dem Enironment Sachen auszulesen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Leonidas hat geschrieben:Also für den Usernamen tät ich ja ``getpass.getuser()`` verwenden, das ist IMHO etwas sinnvoller als aus dem Enironment Sachen auszulesen.
Macht auf jeden Fall unter Windows Sinn, da es "USER" dort nicht gibt, wenn man es nicht selbst anlegt.

Edit: Na ja, es gibt "USERNANE" unter Windows.
Zuletzt geändert von hendrikS am Mittwoch 25. November 2009, 21:34, insgesamt 1-mal geändert.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Hyperion hat geschrieben:Ich würds wohl so angehen:

Code: Alles auswählen

In [8]: import os

In [9]: print os.environ["USER"]
------> print(os.environ["USER"])
nelson
Geht bei mir nicht

Code: Alles auswählen

>>> import os
>>> print os.environ["USER"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python26\lib\os.py", line 423, in __getitem__
    return self.data[key.upper()]
KeyError: 'USER'
>>>
the more they change the more they stay the same
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

hendrikS hat geschrieben:
Leonidas hat geschrieben:Also für den Usernamen tät ich ja ``getpass.getuser()`` verwenden, das ist IMHO etwas sinnvoller als aus dem Enironment Sachen auszulesen.
Macht auf jeden Fall unter Windows Sinn, da es "USER" dort nicht gibt, wenn man es nicht selbst anlegt.

Edit: Na ja, es gibt "USERNAME" unter Windows.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Uups da hab ich wohl zu früh das Schreiben angefangen
the more they change the more they stay the same
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

hendrikS hat geschrieben: Macht auf jeden Fall unter Windows Sinn, da es "USER" dort nicht gibt, wenn man es nicht selbst anlegt.
Dann hab ich das wohl mal angelegt... bei mir ging das nämlich. Aber Leonidas Lösung ist sicherlich eleganter.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

In der cygwin Umgebung ist USER vorhanden.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

hendrikS hat geschrieben:In der cygwin Umgebung ist USER vorhanden.
Ist bei mir nicht installliert ;-)
Antworten