Wie setze ich Umgebungsvariablen in Python?

Lesezeit: 7 Minuten

Benutzer-Avatar
prahallada

Ich muss einige Umgebungsvariablen im Python-Skript festlegen und möchte, dass alle anderen Skripts, die von Python aufgerufen werden, den Satz der Umgebungsvariablen sehen.

Wenn ich mache,

os.environ["DEBUSSY"] = 1

es beschwert sich, das zu sagen 1 muss eine Zeichenfolge sein.

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

  • Verwandte: Wie greife ich von Python aus auf Umgebungsvariablen zu?

    – Stevoisiak

    16. März 2018 um 13:45 Uhr

Benutzer-Avatar
Sven Marnach

Umgebungsvariablen müssen Zeichenfolgen sein, verwenden Sie also

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

um die Variable zu setzen DEBUSSY zur Saite 1.

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

print(os.environ["DEBUSSY"])

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

  • Auf einigen Plattformen ändert das Ändern von os.environ nicht wirklich die Systemumgebung, weder für den aktuellen Prozess noch für untergeordnete Prozesse. Weitere Informationen finden Sie in den Dokumenten: docs.python.org/2/library/os.html#os.environ

    – Evan

    21. April 2016 um 20:57 Uhr

  • @Evan Möglicherweise gibt es einige historische Unix-Varianten, die nicht unterstützt werden putenv(), aber für diese Unixen können Sie sowieso nichts tun. Sogar alte Versionen von AIX und HPUX, mit denen ich gearbeitet habe, haben es unterstützt. Wenn jemand tatsächlich in der Lage ist, einen Computer zu finden, der dies heute nicht unterstützt, habe ich starke Zweifel, dass er Python auf diesem Computer ausführen kann. 🙂

    – Sven Marnach

    21. April 2016 um 21:47 Uhr


  • Vorsicht: um aus @ Evans Referenz oben zu zitieren, Solche Änderungen an der Umgebung wirken sich auf Subprozesse aus, die mit os.system(), popen() oder fork() und execv() gestartet wurden. Mit anderen Worten, denken Sie daran, dass dieser Ansatz nicht die Art und Weise ändert, wie Ihr Programm ausgeführt wird, sondern nur die Art und Weise, wie die untergeordneten Elemente Ihres Programms ausgeführt werden. Richtig, Ihr Programm kann Umgebungsvariablen setzen und zurücklesen, aber nur aus der Umgebung, die es für seine Kinder konfiguriert. Siehe auch: Aktuelle Prozessumgebung ändern. Bisher habe ich keine Möglichkeit gefunden, wie ein Python-Skript seine übergeordnete Umgebung ändern kann.

    – CODELESEN

    14. Mai 2016 um 16:55 Uhr


  • @SvenMarnach ist die Aussage “untergeordneter Prozess erbt automatisch die Umgebung des übergeordneten Prozesses” wahr für Shell wie Bash.

    – Krishna Oza

    13. Januar 2017 um 5:09 Uhr

  • Für alle totalen Noobs wie mich müssen Sie tippen import os zuerst, oder das wird nicht funktionieren.

    – Harry

    18. November 2020 um 8:20 Uhr

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 es

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

Berücksichtigen Sie beim Abrufen, dass Sie dies versuchen sollten, um Fehler zu vermeiden

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

möglicherweise ‘-1’ für ‘Not Set’ 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)

  • Können Sie sagen, wie die Variable auf einem Linux-Rechner gesetzt würde, ist der Code für alle Plattformen gleich?

    – Anurag-Sharma

    4. Januar 2014 um 16:11 Uhr

  • Es macht selten Sinn, -1 für eine fehlende ganze Zahl zu speichern. Eine bessere Wette wäre myvar = int(os.environ.get('MYVAR')) if os.environ.get('MYVAR', '') != '' else None – auf diese Weise wäre es None, wenn keine Nummer angegeben wurde

    – Benjamin Atkin

    7. Mai 2019 um 21:30 Uhr

  • Wenn Sie es mit ganzen Zahlen zu tun haben, ist eine -1 sinnvoll. Obwohl ich wahrscheinlich eine Variable/Konstante auf den Wert setzen würde, den ich für not set verwenden würde (z. B. value_not_set = '-1'). Dann könnten Sie verwenden debussy = int(os.environ.get('DEBUSSY', value_not_set))

    – yeOldeDataSmythe

    1. November 2019 um 13:20 Uhr

Benutzer-Avatar
sisanared

os.environ verhält sich wie ein Python-Wörterbuch, sodass alle gängigen Wörterbuchoperationen ausgeführt werden können. In Ergänzung zu get und set Operationen, die in den anderen Antworten erwähnt wurden, können wir auch einfach prüfen, ob ein Schlüssel vorhanden ist. Die Schlüssel und Werte sollten gespeichert werden als Saiten.

Python 3

Für Python 3 verwenden Wörterbücher die in Stichwort statt has_key

>>> 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'

Bei der Verwendung ist eine wichtige Sache zu beachten os.environ:

Obwohl untergeordnete Prozesse die Umgebung vom übergeordneten Prozess erben, war ich kürzlich auf ein Problem gestoßen und habe herausgefunden, ob Sie andere Skripts haben, die die Umgebung aktualisieren, während Ihr Python-Skript ausgeführt wird os.environ wieder wird nicht die neuesten Werte widerspiegeln.

Auszug aus dem Dokumente:

Diese Zuordnung wird erfasst, wenn das os-Modul zum ersten Mal importiert wird, normalerweise während des Python-Starts als Teil der Verarbeitung von site.py. Nach dieser Zeit vorgenommene Änderungen an der Umgebung werden nicht in os.environ widergespiegelt, mit Ausnahme von Änderungen, die durch direktes Ändern 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'>

  • Die Umgebungsvariablen eines Prozesses werden festgelegt, wenn der Prozess erstellt wird. Alle Änderungen, die danach vorgenommen werden, wirken sich nicht auf die eigene Kopie der Umgebungsvariable des Prozesses aus. Dies ist allen Prozessen gemeinsam, nicht nur Python. Des Weiteren, os.environ.data wurde in Python 3.2 in umbenannt os.environ._data, das Unterstrich-Präfix, das anzeigt, dass Sie es nicht direkt lesen sollten. Wie auch immer, os.environ._data wird sowieso keine aktualisierten Werte haben.

    – Al Sweigart

    31. Juli 2018 um 20:14 Uhr

  • Ja, jetzt verstehe ich. Ich wollte meine anfängliche Überraschung mit anderen teilen, die vorbeischauen. Vielen Dank für den Hinweis auf das Update des Variablennamens seit 3.2, wird die Antwort aktualisieren.

    – sisanared

    1. August 2018 um 6:14 Uhr

Benutzer-Avatar
Surabh Desai

Bevor Sie diese Methode verwenden, gehen Sie bitte die Kommentare durch

Ich habe versucht, Umgebungsvariablen hinzuzufügen. Mein Ziel war es, einige Benutzerinformationen in Systemvariablen zu speichern, damit 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, aber diese Variablen existieren in den jeweiligen Prozessen, sodass Sie sie nicht auf der Registerkarte Umgebungsvariablen der Windows-Systemeinstellungen finden. So ziemlich der obige Code hat meinem Zweck nicht gedient. Dieses Problem wird hier diskutiert: Problem beim Speichern von Variablen

os.environ.putenv(key, value)

Wieder ein erfolgloser Versuch. Endlich gelang es mir, Variablen erfolgreich im Windows-Umgebungsregister zu speichern, indem ich die Windows-Shell-Befehle nachahmte, die in die Systemklasse des os-Pakets eingeschlossen waren. 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.

wenn ich os.environ mache[“DEBUSSY”] = 1, es beschwert sich, dass 1 eine Zeichenfolge sein muss.

Dann mach

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

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

Benutz einfach os.environ["DEBUSSY"]wie in

some_value = os.environ["DEBUSSY"]

Benutzer-Avatar
Mohidin bin Mohammed

Variable setzen:

Artikel Zuweisungsmethode mit Schlüssel:

import os    
os.environ['DEBUSSY'] = '1'  #Environ Variable must be string not Int

zu bekommen oder zu überprüfen, ob es existierte oder nicht,

seit os.umgebung ist eine Instanz, die Sie objektweise ausprobieren können.

Methode 1:

os.environ.get('DEBUSSY') # this is error free method if not will return None by default

wird bekommen '1' als Rückgabewert

Methode 2:

os.environ['DEBUSSY'] # will throw an key error if not found!

Methode 3:

'DEBUSSY' in os.environ  # will return Boolean True/False

Methode 4:

os.environ.has_key('DEBUSSY') #last 2 methods are Boolean Return so can use for conditional statements

Benutzer-Avatar
DiebMeister

Wie wäre es mit os.environ["DEBUSSY"] = '1'? Umgebungsvariablen sind immer Strings.

1145800cookie-checkWie setze ich Umgebungsvariablen in Python?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy