あなたは実際にやりたい
import os
os.environ["MY_DATA"] = "my_export"
それほど単純ではありません:
python -c "import os; os.putenv('MY_DATA','1233')"
$ echo $MY_DATA # <- empty
ただし:
python -c "import os; os.putenv('MY_DATA','123'); os.system('bash')"
$ echo $MY_DATA #<- 123
これを行うもう 1 つの方法は、急いで後味が気にならない場合、bash 環境で python スクリプトの出力を実行し、python で環境設定を実行するコマンドを出力することです。理想的ではありませんが、ピンチで仕事を終わらせることができます.シェル間での移植性はあまり高くないため、YMMV.
$(python -c 'print "export MY_DATA=my_export"')
(一部のシェルではステートメントをバッククォートで囲むこともできます ``)
export
シェルに直接与えるコマンドです (例:bash
)、環境変数の 1 つを追加または変更するように指示します。シェルの環境を子プロセス (Python など) から変更することはできません。それは不可能です。
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
一番下の /bin/sh
のとき サブプロセスは export ...
の実行を終了します コマンドを実行すると、変更したばかりの環境と共に破棄されます。