Seite 1 von 1
os.getenv() -> Liste von Environments
Verfasst: Dienstag 30. Oktober 2007, 08:36
von wivaxing
Hi,
mit getenv() sich eine Environment-Variable zu holen ist ja sehr praktisch, ist es aber auch irgendwie möglich durch eine Liste alle Environments zu iterieren - bzw. einfach irgendwie alles was da an Variablen rumfliegt in eine Liste zu bekommen?
danke
Verfasst: Dienstag 30. Oktober 2007, 08:45
von gerold
Hallo wivaxing!
``os.environ``
mfg
Gerold

Verfasst: Dienstag 30. Oktober 2007, 08:48
von CM
Hoi,
os.environ ist womöglich was Du suchst. Ist zwar keine Liste, sondern ein dict, aber das ist ja auch nur sinnvoll. Bevor Du aber anfängst dieses dict direkt zu manipulieren, lies dies mal durch:
http://docs.python.org/lib/os-procinfo.html
hoffe, ich habe Dich richtig verstanden,
Christian
edit: zu spät ...
Verfasst: Dienstag 30. Oktober 2007, 09:27
von wivaxing
Vielen Dank - das ist klasse.
Ist es evtl. auch möglich unaufgelöste Definitionen aus den Variablen zu erhalten? Ich kann ja in den Variablen auch auf andere verweisen
set BSP_A = C:\DirA
set BSP_B = %BSP_A%\DirB
Ist es evtl. auch möglich unter Python den Wert von Variable BSP_B als %BSP_A%\DirB und nicht als C:\DirA\DirB geliefert zu kommen?
danke
Verfasst: Dienstag 30. Oktober 2007, 09:39
von gerold
Hallo wivaxing!
Ja, dass funktioniert.
Code: Alles auswählen
>>> import os
>>> os.path.expandvars("${HOMEDRIVE}${HOMEPATH}")
'J:\\Dokumente und Einstellungen\\Gerold'
>>> os.path.expanduser("~")
'J:\\Dokumente und Einstellungen\\Gerold'
>>>
mfg
Gerold

Verfasst: Dienstag 30. Oktober 2007, 09:54
von wivaxing
gerold hat geschrieben:Hallo wivaxing!
Ja, dass funktioniert.
Danke, wobei ich ( glaub ich

) was anderes meine. Ich möchte Environment-Variablen mit anderen Variablen drin auslesen können und auch wieder setzen können.
Also wie im Beispiel oben will ich den relativen Pfad
%BSP_A%\DirB einer Variable und nicht den absoluten, aufgelösten haben. Ebenso möchte ich Variablen Werte zuweisen können wiederum mit Verweisen auf andere Variablen. Ist das irgendwie machbar?
Verfasst: Dienstag 30. Oktober 2007, 10:28
von Leonidas
Nein, nicht aufgelöste Variablen gibt es nicht, sie werden ja nicht vom Prozess aufgelöst sondern von der Shell. Also sieht der Python-Interpreter, wie jedes andere Programm, sie nur in "aufgelöster" Form. Das ist auch ganz gut so, denn sonst müsste jedes Programm, welches Umgebungsvariablen verwendet sie selbst auflösen und da würde es sicherlich einige Programme geben, die das nicht können. Außerdem kann die Variablen-Syntax von Shell zu Shell wechseln, dann müsste jedes Programm alle möglichen Syntaxvariationen verstehen.
Verfasst: Dienstag 30. Oktober 2007, 11:10
von gerold
Hallo wivaxing!
Meine Glaskugel gibt mir nur ganz schwache Signale...
Willst du vielleicht ``string.Template`` und Umgebungsvariablen miteinander verbinden?
http://docs.python.org/lib/node40.html
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import os
from string import Template
tmpl = Template("${HOMEDRIVE}${HOMEPATH}")
vars = dict(os.environ) # Kopie der Umgebungsvariablen erstellen
vars["HOMEDRIVE"] = "Z:"
print tmpl.safe_substitute(vars)
# --> Z:\Dokumente und Einstellungen\Gerold
mfg
Gerold
PS: Umgebungsvariablen bekommst du nicht "unaufgelöst" zurück. Aber du könntest (nur unter Windows!!!) die "${}" innerhalb der Umgebungsvariable statt "%%" verwenden.
Verfasst: Mittwoch 31. Oktober 2007, 09:57
von wivaxing
Leonidas hat geschrieben:Nein, nicht aufgelöste Variablen gibt es nicht, sie werden ja nicht vom Prozess aufgelöst sondern von der Shell. Also sieht der Python-Interpreter, wie jedes andere Programm, sie nur in "aufgelöster" Form. Das ist auch ganz gut so, denn sonst müsste jedes Programm, welches Umgebungsvariablen verwendet sie selbst auflösen und da würde es sicherlich einige Programme geben, die das nicht können. Außerdem kann die Variablen-Syntax von Shell zu Shell wechseln, dann müsste jedes Programm alle möglichen Syntaxvariationen verstehen.
Ich hoffte eher, daß man zusätzlich die Möglichkeit hätte auf die entsprechende OS-Api zuzugreifen und sich diese Definition zu holen. Natürlich nicht per default - Python könnte ja seinen eigenen Syntax verwenden und so diese Werte transferieren.
Verfasst: Mittwoch 31. Oktober 2007, 09:59
von wivaxing
gerold hat geschrieben:PS: Umgebungsvariablen bekommst du nicht "unaufgelöst" zurück. Aber du könntest (nur unter Windows!!!) die "${}" innerhalb der Umgebungsvariable statt "%%" verwenden.
Du meinst beim Setzen? Beim Setzen wäre es für mich interessanter eine Definition zu setzen, die das OS dann auflöst und nicht schon in Python.
BTW: wenn das nur in der Shell landet, dann überstehen Änderungen an den Variablen auch nur die Shell-Sitzung?