1252 Stimmen

Wie setzt man Umgebungsvariablen in Python?

Ich muss einige Umgebungsvariablen im Python-Skript setzen und ich möchte, dass alle anderen Skripte, die von Python aus aufgerufen werden, die gesetzten Umgebungsvariablen sehen.

Wenn ich es tue,

os.environ["DEBUSSY"] = 1

beanstandet er, dass 1 muss eine Zeichenkette sein.

Ich möchte auch wissen, wie ich die Umgebungsvariablen in Python (im letzten Teil des Skripts) lesen kann, sobald ich sie gesetzt habe.

3 Stimmen

1569voto

Sven Marnach Punkte 525472

Umgebungsvariablen müssen Strings sein, also verwenden Sie

os.environ["DEBUSSY"] = "1"

um die Variable DEBUSSY zur Zeichenkette 1 .

Um später auf diese Variable zuzugreifen, verwenden Sie einfach

print(os.environ["DEBUSSY"])

Untergeordnete Prozesse erben automatisch die Umgebung des übergeordneten Prozesses - es ist keine besondere Aktion Ihrerseits erforderlich.

165voto

Mark Punkte 2015

Möglicherweise müssen Sie einige weitere Aspekte für die Robustheit des Codes berücksichtigen;

wenn Sie eine ganzzahlige Variable als Umgebungsvariable speichern, versuchen Sie

os.environ['DEBUSSY'] = str(myintvariable)

dann für den Abruf, bedenken Sie, dass Sie zur Vermeidung von Fehlern versuchen sollten

os.environ.get('DEBUSSY', 'Not Set')

eventuell '-1' für 'Nicht gesetzt' ersetzen

Also, um das alles zusammenzufassen

myintvariable = 1
os.environ['DEBUSSY'] = str(myintvariable)
strauss = int(os.environ.get('STRAUSS', '-1'))
# NB KeyError <=> strauss = os.environ['STRAUSS']
debussy = int(os.environ.get('DEBUSSY', '-1'))

print "%s %u, %s %u" % ('Strauss', strauss, 'Debussy', debussy)

122voto

sisanared Punkte 3899

os.environ verhält sich wie ein Python-Wörterbuch, so dass alle üblichen Wörterbuchoperationen durchgeführt werden können. Zusätzlich zu den get y set Operationen, die in den anderen Antworten erwähnt wurden, können wir auch einfach prüfen, ob ein Schlüssel existiert. Die Schlüssel und Werte sollten gespeichert werden als Zeichenketten .

Python 3

In Python 3 verwenden Wörterbücher die in Schlüsselwort anstelle von hat_Schlüssel

>>> import os
>>> 'HOME' in os.environ  # Check an existing env. variable
True
...

Python 2

>>> import os
>>> os.environ.has_key('HOME')  # Check an existing env. variable
True
>>> os.environ.has_key('FOO')   # Check for a non existing variable
False
>>> os.environ['FOO'] = '1'     # Set a new env. variable (String value)
>>> os.environ.has_key('FOO')
True
>>> os.environ.get('FOO')       # Retrieve the value
'1'

Es gibt einen wichtigen Punkt, der bei der Verwendung von os.environ :

Obwohl Kindprozesse die Umgebung vom Elternprozess erben, bin ich kürzlich auf ein Problem gestoßen und habe herausgefunden, dass, wenn andere Skripte die Umgebung aktualisieren, während Ihr Python-Skript läuft, der Aufruf von os.environ wieder spiegelt nicht die neuesten Werte wider .

Auszug aus dem docs :

Diese Zuordnung wird beim ersten Import des os-Moduls erfasst, normalerweise während des Python-Starts als Teil der Verarbeitung von site.py. Änderungen an der Umgebung, die nach diesem Zeitpunkt vorgenommen werden, werden nicht in os.environ widergespiegelt, mit Ausnahme von Änderungen, die durch direkte Modifikation von os.environ vorgenommen wurden.

os.environ.data das alle Umgebungsvariablen speichert, ist ein dict-Objekt, das alle Umgebungswerte enthält:

>>> type(os.environ.data)  # changed to _data since v3.2 (refer comment below)
<type 'dict'>

42voto

Sourabh Desai Punkte 623

Bevor Sie diese Methode anwenden, lesen Sie bitte die Kommentare

Ich habe versucht, Umgebungsvariablen hinzuzufügen. Mein Ziel war es, einige Benutzerinformationen in Systemvariablen zu speichern, so dass ich diese Variablen für zukünftige Lösungen als Alternative zu Konfigurationsdateien verwenden kann. Die im folgenden Code beschriebene Methode hat mir jedoch überhaupt nicht geholfen.

import os
os.environ["variable_1"] = "value_1"
os.environ["variable_2"] = "value_2"
# To Verify above code
os.environ.get("variable_1")
os.environ.get("variable_2")

Dieser einfache Codeblock funktioniert gut, allerdings befinden sich diese Variablen innerhalb der jeweiligen Prozesse, so dass Sie sie nicht auf der Registerkarte Umgebungsvariablen in den Windows-Systemeinstellungen finden werden. Der obige Code hat meinen Zweck nicht erfüllt. Dieses Problem wird hier diskutiert: Problem beim Speichern von Variablen

os.environ.putenv(key, value)

Ein weiterer erfolgloser Versuch. Schließlich gelang es mir, Variablen erfolgreich im Fensterumgebungsregister zu speichern, indem ich die Windows-Shell-Befehle nachahmte, die in der Systemklasse des Pakets os verpackt sind. Der folgende Code beschreibt diesen erfolgreichen Versuch.

os.system("SETX {0} {1} /M".format(key, value))

Ich hoffe, dass dies für einige von Ihnen hilfreich sein wird.

27voto

Jim Brissom Punkte 30135

Wenn ich os.environ["DEBUSSY"] = 1 wähle, wird beschwert es sich und sagt, dass 1 ein Zeichenkette.

Dann tun

os.environ["DEBUSSY"] = "1"

Ich möchte auch wissen, wie man die Umgebungsvariablen in Python (im späteren Teil des Skripts), sobald ich die sie gesetzt habe.

Verwenden Sie einfach os.environ["DEBUSSY"] wie in

some_value = os.environ["DEBUSSY"]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X