Ve skutečnosti to chcete udělat
import os
os.environ["MY_DATA"] = "my_export"
Není to tak jednoduché:
python -c "import os; os.putenv('MY_DATA','1233')"
$ echo $MY_DATA # <- empty
Ale:
python -c "import os; os.putenv('MY_DATA','123'); os.system('bash')"
$ echo $MY_DATA #<- 123
Dalším způsobem, jak to udělat, pokud spěcháte a nevadí vám ta hackerská pachuť, je spustit výstup skriptu python ve vašem prostředí bash a vytisknout příkazy k provedení nastavení prostředí v pythonu. Není to ideální, ale může to udělat práci v nouzi. Není příliš přenosný přes shelly, takže YMMV.
$(python -c 'print "export MY_DATA=my_export"')
(příkaz můžete také uzavřít zpětnými znaménky v některých shellech ``)
export
je příkaz, který zadáváte přímo do shellu (např. bash
), abyste mu řekli, aby přidal nebo upravil jednu ze svých proměnných prostředí. Nemůžete změnit prostředí svého shellu z podřízeného procesu (jako je Python), prostě to není možné.
Zde je to, co se stane, když vyzkoušíte 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
Když je nejspodnější /bin/sh
podproces dokončí spuštění vašeho export ...
příkaz, pak je zahozen spolu s prostředím, které jste právě změnili.