Ich habe eine kleine Python-Anwendung, gestartet über subprocess.Popen
, die einige Parameter in Form von Umgebungsvariablen nimmt. Ich tue dies, indem ich die Umgebungsstruktur in den Popen
Aufruf übergebe. Das Programm liest dann die Variablen über os.getenv
.Wann würde os.environ ['foo'] nicht mit os.getenv ('foo') übereinstimmen?
Oder vielmehr, es hat sie so gelesen. Unter Windows funktionierte es gut. Aber auf der FreeBSD-Servern os.getenv
kehrt None
für alle Parameter in wir übergeben. Der ungerade Teil ist, dass os.environ
die Werte hat gerade fein — und in der Tat einfach Schalt alle os.getenv('foo')
Anrufe os.environ['foo']
machte alles gut funktionieren auf beiden Plattformen .
Warum unterscheiden sich diese Werte? Wann ist das eine über das andere?
Unter Windows 10 funktionierte 'os.putenv ('abc', '123')' nicht, dh die neue Variable wurde nicht gesetzt. "Os.environ ['abc'] = '123'' funktioniert und anschließend' os.getenv ('abc')' funktioniert auch. –
@arvindpdmn Nach einer weiteren Untersuchung, weil 'putenv()' die Umgebungsvariable nicht tatsächlich in 'os.environ' speichert; vielmehr ruft 'environ .__ setitem __()' 'putenv()' auf und speichert die Daten auch lokal, und weder 'getenv()' noch 'environ .__ getitem __()' fragen tatsächlich die Umgebung ab, sie operieren von was auch immer .environ' hat gespeichert. Ziemlich verwirrende Art, es zu implementieren. – JAB