Vous voulez vraiment faire
import os
os.environ["MY_DATA"] = "my_export"
Pas si simple :
python -c "import os; os.putenv('MY_DATA','1233')"
$ echo $MY_DATA # <- empty
Mais :
python -c "import os; os.putenv('MY_DATA','123'); os.system('bash')"
$ echo $MY_DATA #<- 123
Une autre façon de procéder, si vous êtes pressé et que l'arrière-goût du hacky ne vous dérange pas, consiste à exécuter la sortie du script python dans votre environnement bash et à imprimer les commandes pour exécuter la configuration de l'environnement en python. Pas idéal, mais il peut faire le travail en un clin d'œil. Ce n'est pas très portable d'un shell à l'autre, donc YMMV.
$(python -c 'print "export MY_DATA=my_export"')
(vous pouvez également entourer l'instruction de backticks dans certains shells ``)
export
est une commande que vous donnez directement au shell (par exemple bash
), pour lui dire d'ajouter ou de modifier une de ses variables d'environnement. Vous ne pouvez pas modifier l'environnement de votre shell à partir d'un processus enfant (tel que Python), ce n'est tout simplement pas possible.
Voici ce qui se passe lorsque vous essayez 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
Lorsque le /bin/sh
le plus bas le sous-processus termine l'exécution de votre export ...
commande, puis elle est supprimée, ainsi que l'environnement que vous venez de modifier.