os.getenv() -> Liste von Environments

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
wivaxing
User
Beiträge: 21
Registriert: Mittwoch 17. Oktober 2007, 14:16

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo wivaxing!

``os.environ``

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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 ...
wivaxing
User
Beiträge: 21
Registriert: Mittwoch 17. Oktober 2007, 14:16

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
wivaxing
User
Beiträge: 21
Registriert: Mittwoch 17. Oktober 2007, 14:16

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?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo wivaxing!

Meine Glaskugel gibt mir nur ganz schwache Signale... :roll:

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.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
wivaxing
User
Beiträge: 21
Registriert: Mittwoch 17. Oktober 2007, 14:16

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.
wivaxing
User
Beiträge: 21
Registriert: Mittwoch 17. Oktober 2007, 14:16

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?
Antworten