realmente quieres hacer
import os
os.environ["MY_DATA"] = "my_export"
No es tan simple:
python -c "import os; os.putenv('MY_DATA','1233')"
$ echo $MY_DATA # <- empty
Pero:
python -c "import os; os.putenv('MY_DATA','123'); os.system('bash')"
$ echo $MY_DATA #<- 123
Otra forma de hacer esto, si tiene prisa y no le importa el regusto a hacky, es ejecutar la salida del script de python en su entorno bash e imprimir los comandos para ejecutar la configuración del entorno en python. No es ideal, pero puede hacer el trabajo en un abrir y cerrar de ojos. No es muy portátil entre shells, así que YMMV.
$(python -c 'print "export MY_DATA=my_export"')
(también puede encerrar la declaración en acentos graves en algunos shells ``)
export
es un comando que le das directamente al shell (por ejemplo, bash
), para indicarle que agregue o modifique una de sus variables de entorno. No puede cambiar el entorno de su shell desde un proceso secundario (como Python), simplemente no es posible.
Esto es lo que sucede cuando intenta os.system('export MY_DATA="my_export"')
...
/bin/bash process, command `python yourscript.py` forks python subprocess
|_
/usr/bin/python process, command `os.system()` forks /bin/sh subprocess
|_
/bin/sh process, command `export ...` changes its local environment
Cuando el /bin/sh
más bajo el subproceso termina de ejecutar su export ...
comando, luego se descarta, junto con el entorno que acaba de cambiar.