Saltar al contenido

Python: Exportación de variables de entorno en subprocess.Popen (..)

Solución:

La sustitución de variables ambientales. en la línea de comando lo hace el shell, no / bin / echo. Por lo tanto, debe ejecutar el comando en un shell para obtener la sustitución:

In [22]: subprocess.Popen('/bin/echo $TEST_VARIABLE', shell=True, env=d).wait()
1234
Out[22]: 0

Eso no significa que la variable de entorno no esté configurada cuando shell=False, sin embargo. Incluso sin shell=True, el ejecutable ve las variables de entorno establecidas por el env parámetro. Por ejemplo, date se ve afectado por el TZ Variable ambiental:

In [23]: subprocess.Popen(["date"], env={'TZ': 'America/New_York'}).wait()
Wed Oct 29 22:05:52 EDT 2014
Out[23]: 0

In [24]: subprocess.Popen(["date"], env={'TZ': 'Asia/Taipei'}).wait()
Thu Oct 30 10:06:05 CST 2014
Out[24]: 0

Para Python 3.5 y versiones posteriores, puede usar generalizaciones de descompresión, por ejemplo:

env = {
    **os.environ,
    "TEST_VARIABLE": str(1234),
}
subprocess.Popen('/usr/bin/mybinary', env=env).wait()

Deberías usar os.environ.copy() para que funcione. Crea una copia de todo el diccionario de entorno que luego puede modificar antes de pasarlo al subproceso, sin modificar el entorno de proceso actual.

Vea esta respuesta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *