Ich muss einige Umgebungsvariablen im Python-Skript festlegen und möchte, dass alle anderen Skripte, die von Python aufgerufen werden, die festgelegten Umgebungsvariablen sehen.
Wenn ich mache
os.environ["DEBUSSY"] = 1`
es beschwert sich zu sagen, dass 1
das ein String sein muss.
Ich möchte auch wissen, wie man die Umgebungsvariablen in Python (im späteren Teil des Skripts) liest, sobald ich sie festgelegt habe.
python
environment-variables
Prahallada
quelle
quelle
Antworten:
Umgebungsvariablen müssen Zeichenfolgen sein, verwenden Sie sie also
um die Variable
DEBUSSY
auf den String zu setzen1
.Um später auf diese Variable zuzugreifen, verwenden Sie einfach:
Untergeordnete Prozesse erben automatisch die Umgebungsvariablen des übergeordneten Prozesses. Es ist keine spezielle Aktion von Ihrer Seite erforderlich.
quelle
putenv()
, aber für diese Unixen gibt es sowieso nichts, was Sie tun können. Sogar die alte Version von AIX und HPUX, mit der ich gearbeitet habe, hat dies unterstützt. Wenn jemand tatsächlich einen Computer findet, der ihn heute nicht unterstützt, habe ich ernsthafte Zweifel, dass er Python auf diesem Computer ausführen kann. :)Möglicherweise müssen Sie einige weitere Aspekte für die Robustheit des Codes berücksichtigen.
Versuchen Sie es, wenn Sie eine Ganzzahlvariable als Umgebungsvariable speichern
Beachten Sie beim Abrufen, dass Sie es versuchen sollten, um Fehler zu vermeiden
möglicherweise 'Nicht gesetzt' durch '-1' ersetzen
Also, um das alles zusammenzufügen
quelle
myvar = int(os.environ.get('MYVAR')) if os.environ.get('MYVAR', '') != '' else None
- auf diese Weise wäre es Keine, wenn keine Nummer angegeben würdevalue_not_set = '-1'
. B. ). Dann könnten Siedebussy = int(os.environ.get('DEBUSSY', value_not_set))
os.environ
verhält sich wie ein Python-Wörterbuch, sodass alle gängigen Wörterbuchoperationen ausgeführt werden können. Zusätzlich zu den in den anderen Antworten genanntenget
undset
Operationen können wir auch einfach überprüfen, ob ein Schlüssel vorhanden ist. Die Schlüssel und Werte sollten als Zeichenfolgen gespeichert werden .Python 3
Für Python 3 verwenden Wörterbücher der in Schlüsselwort statt has_key
Python 2
Bei der Verwendung ist Folgendes 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, dass beim
os.environ
erneuten Aufrufen nicht die neuesten Werte angezeigt werden, wenn andere Skripts die Umgebung aktualisieren, während Ihr Python-Skript ausgeführt wird .Auszug aus den Dokumenten :
os.environ.data
Das alle Umgebungsvariablen speichert, ist ein diktiertes Objekt, das alle Umgebungswerte enthält:quelle
os.environ.data
wurde in Python 3.2 in umbenanntos.environ._data
, wobei der Unterstrich zeigt, dass Sie ihn nicht direkt lesen sollten. Aufos.environ._data
jeden Fall werden die Werte sowieso nicht aktualisiert.Dann mach
Benutz einfach
os.environ["DEBUSSY"]
wie inquelle
Variable setzen:
Element Zuweisungsmethode mit Schlüssel:
zu bekommen oder zu überprüfen, ob es existiert oder nicht,
Da os.environ eine Instanz ist, können Sie versuchen, Objekte zu verwenden.
Methode 1:
wird
'1'
als Rückgabewert erhaltenMethode 2:
Methode 3:
Methode 4:
quelle
Sie sollten der Umgebungsvariablen einen Zeichenfolgenwert zuweisen.
os.environ["DEBUSSY"] = "1"
Wenn Sie die Umgebungsvariable lesen oder drucken möchten, verwenden Sie einfach
print os.environ["DEBUSSY"]
Diese Änderungen werden nur für den aktuellen Prozess wirksam, dem sie zugewiesen wurden. Der Wert wird nicht dauerhaft geändert. Die untergeordneten Prozesse erben automatisch die Umgebung des übergeordneten Prozesses.
quelle
set [<name>=[<value>]]
aber es macht es nur für den aktuell laufenden Prozess. Wenn ich das cmd schließe, existiert es nicht und selbst wenn es geöffnet ist, können andere Programme es nicht sehen.Was ist mit
os.environ["DEBUSSY"] = '1'
? Umgebungsvariablen sind immer Zeichenfolgen.quelle
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.
Dieser einfache Codeblock funktioniert gut. Diese Variablen sind jedoch in den jeweiligen Prozessen vorhanden, sodass Sie sie nicht auf der Registerkarte Umgebungsvariablen der Windows-Systemeinstellungen finden. Ziemlich viel über dem Code hat meinen Zweck nicht erfüllt. Dieses Problem wird hier diskutiert: Problem beim Speichern von Variablen
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 Betriebssystempakets enthalten waren. Der folgende Code beschreibt diesen erfolgreichen Versuch.
Ich hoffe, dass dies für einige von Ihnen hilfreich sein wird.
quelle
Es sollte beachtet werden, dass beim Versuch, die Umgebungsvariable auf eine Bash-Auswertung zu setzen, nicht das gespeichert wird, was Sie erwarten. Beispiel:
Dadurch wird es nicht wie in einer Shell ausgewertet. Statt
/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
als Pfad zu erhalten, erhalten Sie den wörtlichen Ausdruck$(/usr/libexec/java_home)
.Stellen Sie sicher, dass Sie es auswerten, bevor Sie die Umgebungsvariable wie folgt festlegen:
quelle
Sie können das
os.environ
Wörterbuch verwenden, um auf Ihre Umgebungsvariablen zuzugreifen.Ein Problem, das ich hatte, ist, dass wenn ich versuchen würde,
os.system
eine Batch-Datei auszuführen, die Ihre Umgebungsvariablen festlegt (mit dem Befehl SET in einer **. Bat * -Datei), diese nicht wirklich für Ihre Python-Umgebung festgelegt würde (aber für der untergeordnete Prozess, der mit deros.system
Funktion erstellt wird). Um die in der Python-Umgebung festgelegten Variablen tatsächlich abzurufen, verwende ich dieses Skript:quelle
Wenn Sie mit Umgebungsvariablen spielen (Variablen hinzufügen / ändern / entfernen), empfiehlt es sich, den vorherigen Status nach Abschluss der Funktion wiederherzustellen.
Möglicherweise benötigen Sie etwas, das der
modified_environ
Kontextmanager in dieser Frage beschreibt , um die Umgebungsvariablen wiederherzustellen.Klassische Verwendung:
quelle