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
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
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
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.
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
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"]
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
DiebMeister
Wie wäre es mit os.environ["DEBUSSY"] = '1'? Umgebungsvariablen sind immer Strings.
11458000cookie-checkWie setze ich Umgebungsvariablen in Python?yes
Verwandte: Wie greife ich von Python aus auf Umgebungsvariablen zu?
– Stevoisiak
16. März 2018 um 13:45 Uhr