Vuoi davvero fare
import os
os.environ["MY_DATA"] = "my_export"
Non così semplice:
python -c "import os; os.putenv('MY_DATA','1233')"
$ echo $MY_DATA # <- empty
Ma:
python -c "import os; os.putenv('MY_DATA','123'); os.system('bash')"
$ echo $MY_DATA #<- 123
Un altro modo per farlo, se sei di fretta e non ti dispiace il retrogusto hacky, è eseguire l'output dello script python nel tuo ambiente bash e stampare i comandi da eseguire impostando l'ambiente in python. Non è l'ideale, ma può portare a termine il lavoro in un pizzico. Non è molto portabile tra le shell, quindi YMMV.
$(python -c 'print "export MY_DATA=my_export"')
(puoi anche racchiudere l'istruzione tra apici inversi in alcune shell ``)
export
è un comando che dai direttamente alla shell (ad esempio bash
), per dirgli di aggiungere o modificare una delle sue variabili di ambiente. Non puoi cambiare l'ambiente della tua shell da un processo figlio (come Python), semplicemente non è possibile.
Ecco cosa succede quando provi 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
Quando il /bin/sh
più in basso subprocess termina l'esecuzione del tuo export ...
comando, quindi viene scartato, insieme all'ambiente che hai appena modificato.