Gibt es überhaupt einen Unterschied zwischen beiden Ansätzen?
>>> os.getenv('TERM')
'xterm'
>>> os.environ.get('TERM')
'xterm'
>>> os.getenv('FOOBAR', "not found") == "not found"
True
>>> os.environ.get('FOOBAR', "not found") == "not found"
True
Sie scheinen genau die gleiche Funktionalität zu haben.
python
environment-variables
python-os
André Staltz
quelle
quelle
os.environ.get()
der RückgabeNone
(sofern nicht anders angegeben) und löst niemals eine Ausnahme aus, wenn die Umgebung. var. existiert nicht. Ihre verwirrenden Dinge mit der Verwendung, umos.environ['TERM']
die es in der Frage nicht geht.os.environ.get()
vs gefragt ,os.getenv()
aber der Körper enthält auchos.environ
vs,os.environ.get()
sodass diese Antwort zumindest in gewisser Weise korrekt ist - unvollständig, aber korrekt.Siehe diesen verwandten Thread . Grundsätzlich
os.environ
wird beim Import gefunden undos.getenv
ist ein Wrapperos.environ.get
, zumindest in CPython.BEARBEITEN: Auf einen Kommentar in CPython zu antworten,
os.getenv
ist im Grunde eine Abkürzung zuos.environ.get
; daos.environ
wird beim import von geladenos
und erst dann gilt das gleiche füros.getenv
.quelle
os.getenv()
[...] ist, wenn ein Standardwert zurückgegeben werden soll, wenn ein Umgebungsvariablenname nicht inos.environ
den Schlüsseln gefunden wird, anstatt einKeyError
oder was auch immer ausgelöst zu werden, und Sie möchte ein paar Zeichen speichern. "In Python 2.7 mit iPython:
Wir können also zu dem Schluss kommen, dass
os.getenv
es sich nur um einen einfachen Umschlag handeltos.environ.get
.quelle
Während es keinen funktionalen Unterschied zwischen
os.environ.get
undos.getenv
gibt, gibt es einen massiven Unterschied zwischenos.putenv
und dem Einstellen von Einträgenos.environ
.os.putenv
ist defekt , daher sollten Sie standardmäßigos.environ.get
einfach vermeiden, wieos.getenv
Sie zuros.putenv
Symmetrie ermutigt werden .os.putenv
Ändert die tatsächlichen Umgebungsvariablen auf Betriebssystemebene, jedoch auf eine Weise, die nicht durch angezeigtos.getenv
wirdos.environ
, oder auf eine andere Art und Weise, wie Umgebungsvariablen überprüft werden:Sie müssten wahrscheinlich einen ctypes-Aufruf an die C-Ebene durchführen
getenv
, um die realen Umgebungsvariablen nach dem Aufruf anzuzeigenos.putenv
. (Das Starten eines Shell-Unterprozesses und das Abfragen nach seinen Umgebungsvariablen funktioniert möglicherweise auch, wenn Sie sehr vorsichtig mit dem Escapezeichen und--norc
/--noprofile
oder anderen Maßnahmen sind, die Sie ergreifen müssen, um eine Startkonfiguration zu vermeiden, aber es scheint viel schwieriger zu sein, die richtigen Einstellungen vorzunehmen.)quelle
Zusätzlich zu den obigen Antworten:
quelle
os.getenv
ist nur ein Wrapper füros.environ.get
, so dass ich sehr minimalen Overhead bekomme.usec
ist eine Mikrosekunde intimeit
. Der Unterschied in diesem Mikro-Benchmarking betrug 0,18 Mikrosekunden ...