2017-05-18 17 views
0

私は自分の資格情報をgitignoredであるファイル(config_vars.env)に保存したいと思います。 私のプログラムはos.environ.get('DB_NAME')などを使用しているので、プロジェクトを開始し、それらの資格情報を環境変数に設定したいと思います。スクリプトの実行中に仮想環境変数を設定しますか?

スクリプトの実行中にこれらの環境変数を設定してから、プログラムの実行が停止すると削除されます。

私は文字通りpythonやbashを使ってそれらを設定し、終了時にそれらの設定を解除することができました。しかし、それは理想的ではありません。私のプログラムがクラッシュすると、環境変数が残ってしまうからです。

理想的には、私は仮想環境でそれらを自動的に設定でき、自分のプロセスでのみ使用でき、プロセスが実行を停止すると、環境変数はなくなります。

ネイティブのPythonでこれを行う方法はありますか?私はpythonのためのクリックやdotenvのようなものを見てきましたが、他の方法はありませんか?

import os 
import subprocess 

def bash_command(): 

    #not good 
    #subprocess.Popen(cmd, shell=False, executable=".\git-bash.exe") 
    #os.popen('setenv a b') 

    subprocess.call("config_vars.sh", shell=False) 
    print(os.environ.get('DB_NAME')) # prints None because the env var dies with bash 
    import time 
    time.sleep(5) # delays for 5 seconds 

bash_command() 

とconfig_vars.shは次のとおりです:コマンドをエコー

export ENV_FILE=env/config_vars.env 
echo $DB_NAME 

は、それが働いたことを示しているが、bashのプロセスが終了し、その環境を削除するここで

は、私がこれまで持っているものです変数(または仮想環境全体)にアクセスしなくても、Pythonプロセスは続行されます。

質問:私のpythonプロセスが終了したときに死ぬ環境変数を設定するにはどうしたらいいですか?

+0

ここで、DB_NAMEは設定されていますか? –

+0

ファイル内env/config_vars.env "export DB_NAME ..."だと思います –

+1

'source env/config_vars.env'を実行しない限り、DB_NAMEはスクリプトで設定されていません。 –

答えて

3

スクリプトの出力をキャプチャする必要があります。子プロセスは親環境に影響を与えることができないため、プロセス間通信の何らかの形が必要です。

value = subprocess.check_output("config_vars.sh", shell=False).lstrip('\n') 
関連する問題