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

24voto

Auf Variable setzen:

Element Zuweisungsmethode mit Schlüssel:

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

zu erhalten oder zu überprüfen, ob sie existiert oder nicht,

seit os.environ ist eine Instanz, die Sie auf objektive Weise ausprobieren können.

Methode 1:

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

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

18voto

ThiefMaster Punkte 297146

Was ist mit os.environ["DEBUSSY"] = '1' ? Umgebungsvariablen sind immer Zeichenketten.

18voto

RejeeshChandran Punkte 3968

Sie sollten der Umgebungsvariablen einen String-Wert zuweisen.

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

Wenn Sie die Umgebungsvariable lesen oder ausdrucken wollen, verwenden Sie einfach

print os.environ["DEBUSSY"]

Diese Änderungen gelten nur für den aktuellen Prozess, in dem sie zugewiesen wurden, sie ändern den Wert nicht dauerhaft. Die Kindprozesse erben automatisch die Umgebung des Elternprozesses.

enter image description here

15voto

Josh Correia Punkte 2680

Wenn Sie versuchen, die Umgebungsvariable auf eine Bash-Auswertung zu setzen, ist zu beachten, dass wird nicht speichern, was Sie erwarten. Beispiel:

from os import environ

environ["JAVA_HOME"] = "$(/usr/libexec/java_home)"

Dies wird nicht wie in einer Shell ausgewertet, so dass anstelle von /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home als Pfad eingeben, erhalten Sie den wörtlichen Ausdruck $(/usr/libexec/java_home) .

Stellen Sie sicher, dass Sie sie vor dem Setzen der Umgebungsvariablen auswerten, etwa so:

from os import environ
from subprocess import Popen, PIPE

bash_variable = "$(/usr/libexec/java_home)"
capture = Popen(f"echo {bash_variable}", stdout=PIPE, shell=True)
std_out, std_err = capture.communicate()
return_code = capture.returncode

if return_code == 0:
    evaluated_env = std_out.decode().strip()
    environ["JAVA_HOME"] = evaluated_env
else:
    print(f"Error: Unable to find environment variable {bash_variable}")

13voto

Ricardo Alejos Punkte 322

Sie können die os.environ Wörterbuch, um auf Ihre Umgebungsvariablen zuzugreifen.

Ein Problem, das ich hatte, war, dass ich, wenn ich versuchte, die os.system eine Stapeldatei auszuführen, die Ihre Umgebungsvariablen setzt (mit dem SET-Befehl in einer **.bat*-Datei), würde sie diese nicht wirklich für Ihre Python-Umgebung setzen (sondern für den Kindprozess, der mit der os.system Funktion). Um die Variablen tatsächlich in der Python-Umgebung zu setzen, verwende ich dieses Skript:

import re
import system
import os

def setEnvBat(batFilePath, verbose = False):
    SetEnvPattern = re.compile("set (\w+)(?:=)(.*)$", re.MULTILINE)
    SetEnvFile = open(batFilePath, "r")
    SetEnvText = SetEnvFile.read()
    SetEnvMatchList = re.findall(SetEnvPattern, SetEnvText)

    for SetEnvMatch in SetEnvMatchList:
        VarName=SetEnvMatch[0]
        VarValue=SetEnvMatch[1]
        if verbose:
            print "%s=%s"%(VarName,VarValue)
        os.environ[VarName]=VarValue

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