recognized not installed python environment-variables

not - python variables windows



Cómo establecer variables de entorno en Python (8)

Necesito establecer algunas variables de entorno en el script de python y quiero que todos los demás scripts que se llaman desde python (shell scripts), que serán procesos secundarios, vean el conjunto de variables del entorno. El valor es un número.

Si hago os.environ["DEBUSSY"] = 1 , se queja diciendo que 1 tiene que ser una cadena. También quiero saber cómo leer las variables de entorno en python (en la parte posterior de la secuencia de comandos) una vez que lo establezca.


si hago os.environ ["DEBUSSY"] = 1, se queja diciendo que 1 tiene que ser una cadena.

Entonces hazlo

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

También quiero saber cómo leer las variables de entorno en python (en la parte posterior de la secuencia de comandos) una vez que lo establezca.

Simplemente use os.environ["DEBUSSY"] , como en

some_value = os.environ["DEBUSSY"]


¿Qué pasa con os.environ["DEBUSSY"] = ''1'' ? Las variables de entorno son siempre cadenas.


Cuando juegas con variables de entorno (agregar / modificar / eliminar variables), una buena práctica es restaurar el estado anterior al finalizar la función.

Es posible que necesite algo como el administrador de contexto modified_environ descrito en esta question para restaurar las variables de entorno.

Uso clásico:

with modified_environ(DEBUSSY="1"): call_my_function()


Debe asignar un valor de cadena a la variable de entorno.

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

Si desea leer o imprimir la variable de entorno solo use

print os.environ["DEBUSSY"]

Estos cambios serán efectivos solo para el proceso actual donde se asignó, no cambiará el valor permanentemente. Los procesos secundarios heredarán automáticamente el entorno del proceso padre.


Es posible que deba considerar algunos aspectos adicionales para la robustez del código;

cuando almacena una variable de valor entero como una variable de entorno, intente

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

luego para la recuperación, considere que para evitar errores, debe intentar

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

posiblemente sustituir ''-1'' por ''No establecido''

Entonces, para poner todo junto

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)


Las variables de entorno deben ser cadenas, así que use

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

para establecer la variable DEBUSSY a la cadena 1 . Para acceder a esta variable más adelante, simplemente use

print os.environ["DEBUSSY"]

Los procesos secundarios heredan automáticamente el entorno del proceso principal, no se requiere ninguna acción especial de su parte.


Puede usar el diccionario os.environ para acceder a sus variables de entorno.

Ahora, un problema que tuve es que si intentaba usar os.system para ejecutar un archivo por lotes que establece sus variables de entorno (usando el comando SET en un archivo **. Bat *), realmente no las establecería para su entorno de Python (pero para el proceso hijo que se crea con la función os.system ). Para obtener realmente las variables establecidas en el entorno de Python, uso este script:

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


os.environ comporta como un diccionario de Python, por lo que se pueden realizar todas las operaciones comunes del diccionario. Además de las operaciones de get y set mencionadas en las otras respuestas, también podemos verificar si existe una clave

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

Python 3

Para Python 3, los diccionarios usan la palabra clave in en lugar de has_key

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

Hay una cosa importante a tener en cuenta sobre el uso de os.environ :

Aunque los procesos secundarios heredan el entorno del proceso principal, recientemente tuve un problema y descubrí que si tiene otros scripts que actualizan el entorno mientras se ejecuta su script de Python, os.environ llamar a os.environ no reflejará los valores más recientes .

Extracto de la docs.python.org/2/library/os.html#os.environ :

Esta asignación se captura la primera vez que se importa el módulo del sistema operativo, normalmente durante el inicio de Python como parte del proceso site.py. Los cambios en el entorno realizados después de este tiempo no se reflejan en os.environ, a excepción de los cambios realizados modificando os.environ directamente.

os.environ.data que almacena todas las variables de entorno, es un objeto dict, que contiene todos los valores de entorno:

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