Sie tatsächlich tun möchten
import os
os.environ["MY_DATA"] = "my_export"
Gar nicht so einfach:
python -c "import os; os.putenv('MY_DATA','1233')"
$ echo $MY_DATA # <- empty
Aber:
python -c "import os; os.putenv('MY_DATA','123'); os.system('bash')"
$ echo $MY_DATA #<- 123
Wenn Sie es eilig haben und den Hacky-Nachgeschmack nicht stören, können Sie dies auch tun, indem Sie die Ausgabe des Python-Skripts in Ihrer Bash-Umgebung ausführen und die auszuführenden Befehle zum Einstellen der Umgebung in Python ausdrucken. Nicht ideal, aber es kann die Arbeit im Handumdrehen erledigen. Es ist nicht sehr portabel zwischen Shells, also YMMV.
$(python -c 'print "export MY_DATA=my_export"')
(Sie können die Anweisung in manchen Shells auch in Backticks einschließen ``)
export
ist ein Befehl, den Sie direkt an die Shell geben (z. B. bash
), um es anzuweisen, eine seiner Umgebungsvariablen hinzuzufügen oder zu ändern. Sie können die Umgebung Ihrer Shell nicht von einem untergeordneten Prozess (wie Python) aus ändern, es ist einfach nicht möglich.
Folgendes passiert, wenn Sie os.system('export MY_DATA="my_export"')
versuchen ...
/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
Wenn die unterste /bin/sh
Unterprozess beendet die Ausführung Ihres export ...
Befehl, dann wird es verworfen, zusammen mit der Umgebung, die Sie gerade geändert haben.