Necesito establecer algunas variables de entorno en la secuencia de comandos de python y quiero que todas las demás secuencias de comandos a las que se llama desde python vean las variables de entorno establecidas.
Si lo 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 del script) una vez que lo configuro.
python
environment-variables
prahallada
fuente
fuente
Respuestas:
Las variables de entorno deben ser cadenas, así que use
para establecer la variable
DEBUSSY
a la cadena1
.Para acceder a esta variable más tarde, simplemente use:
Los procesos secundarios heredan automáticamente las variables de entorno del proceso primario; no se requiere ninguna acción especial de su parte.
fuente
putenv()
, pero para esos Unixen no hay nada que pueda hacer de todos modos. Incluso la versión anterior de AIX y HPUX con la que trabajé lo admitía. Si alguien puede encontrar una computadora que no lo admite hoy, tengo serias dudas de que pueda ejecutar Python en esa computadora. :)Es posible que deba considerar algunos aspectos adicionales para la solidez del código;
cuando esté almacenando una variable de valor entero como una variable de entorno, intente
luego para la recuperación, considere que para evitar errores, debe intentar
posiblemente sustituya '-1' por 'No establecido'
entonces, para poner todo junto
fuente
myvar = int(os.environ.get('MYVAR')) if os.environ.get('MYVAR', '') != '' else None
: de esa manera sería Ninguno si no se proporcionara ningún númerovalue_not_set = '-1'
). Entonces, podrías usardebussy = int(os.environ.get('DEBUSSY', value_not_set))
os.environ
se comporta como un diccionario de python, por lo que se pueden realizar todas las operaciones comunes del diccionario. Además de las operacionesget
yset
mencionadas en las otras respuestas, también podemos simplemente verificar si existe una clave. Las claves y los valores deben almacenarse como cadenas .Python 3
Para python 3, los diccionarios usan la palabra clave in en lugar de has_key
Python 2
Hay una cosa importante a tener en cuenta sobre el uso
os.environ
:Aunque los procesos secundarios heredan el entorno del proceso principal, me encontré con un problema recientemente y descubrí que si tiene otras secuencias de comandos que actualizan el entorno mientras se ejecuta su secuencia de comandos de Python,
os.environ
volver a llamar no reflejará los últimos valores .Extracto de los documentos :
os.environ.data
que almacena todas las variables de entorno, es un objeto dict, que contiene todos los valores del entorno:fuente
os.environ.data
se renombró en Python 3.2 aos.environ._data
, el prefijo de subrayado que muestra que no debe leerlo directamente. De todos modos,os.environ._data
no tendrá valores actualizados de todos modos.Entonces hazlo
Solo use
os.environ["DEBUSSY"]
, como enfuente
establecer variable:
Método de asignación de elementos utilizando la clave:
para obtener o verificar si existió o no,
dado que os.environ es una instancia, puede intentar de manera objetiva .
Método 1:
obtendrá
'1'
como valor de retornoMétodo 2:
Método 3:
Método 4:
fuente
Debe asignar un valor de cadena a la variable de entorno.
os.environ["DEBUSSY"] = "1"
Si desea leer o imprimir la variable de entorno simplemente use
print os.environ["DEBUSSY"]
Estos cambios serán efectivos solo para el proceso actual donde fue asignado, no cambiará el valor permanentemente. Los procesos secundarios heredarán automáticamente el entorno del proceso principal.
fuente
set [<name>=[<value>]]
pero solo lo hace para el proceso de ejecución actual. Cuando cierro el cmd no existe e incluso cuando está abierto, otros programas no pueden verlo.¿Qué hay de
os.environ["DEBUSSY"] = '1'
? Las variables de entorno son siempre cadenas.fuente
He estado tratando de agregar variables de entorno. Mi objetivo era almacenar cierta información del usuario en las variables del sistema, de modo que pueda usar esas variables para futuras soluciones, como alternativa a los archivos de configuración. Sin embargo, el método descrito en el código a continuación no me ayudó en absoluto.
Este bloque de código simple funciona bien, sin embargo, estas variables existen dentro de los procesos respectivos, de modo que no las encontrará en la pestaña de variables de entorno de la configuración del sistema de Windows. El código más arriba mencionado no sirvió para mi propósito. Este problema se discute aquí: problema de guardar variable
Otro intento fallido. Entonces, finalmente, logré guardar la variable con éxito dentro del registro del entorno de la ventana imitando los comandos de shell de Windows envueltos dentro de la clase de sistema del paquete os. El siguiente código describe este intento exitoso.
Espero que esto sea útil para algunos de ustedes.
fuente
Cabe señalar que si intenta establecer la variable de entorno en una evaluación bash , no almacenará lo que espera. Ejemplo:
Esto no lo evaluará como lo hace en un shell, por lo que en lugar de obtener
/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
como una ruta obtendrá la expresión literal$(/usr/libexec/java_home)
.Asegúrese de evaluarlo antes de configurar la variable de entorno, así:
fuente
Puede usar el
os.environ
diccionario para acceder a sus variables de entorno.Ahora, un problema que tuve es que si intentara usar
os.system
para ejecutar un archivo por lotes que establezca sus variables de entorno (usando el comando SET en un archivo **. Bat *) realmente no las establecería para su entorno de Python (sino para El proceso hijo que se crea con laos.system
función). Para obtener realmente las variables establecidas en el entorno de Python, utilizo este script:fuente
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
modified_environ
administrador de contexto que se describe en esta pregunta para restaurar las variables de entorno.Uso clásico:
fuente