2017-05-18 7 views
0

내 자격 증명을 gitignored 파일 (config_vars.env)에 저장하고 싶습니다. 그럼 내 프로그램이 os.environ.get('DB_NAME') 등을 사용하기 때문에 프로젝트를 시작하고 환경 변수에 해당 자격 증명을 설정하고 싶습니다.스크립트를 실행하는 동안 가상 환경 변수를 설정합니까?

그래서 내 스크립트가 실행되는 동안 환경 변수를 설정하고 내 프로그램이 중지되면 삭제되도록하고 싶습니다.

필자는 파이썬이나 bash를 사용하여 문자 그대로 설정 한 다음 종료시 설정을 해제 할 수 있습니다. 하지만 내 프로그램이 충돌 할 경우 환경 변수가 남아 있기 때문에 이는 이상적이지 않습니다.

이상적으로는 가상 환경에서 자동으로 설정할 수 있고 내 프로세스에서만 사용할 수 있으며 프로세스가 실행을 멈 추면 환경이 사라집니다.

원시 파이썬에서이를 수행 할 수있는 방법이 있습니까? 나는 클릭이나 파이썬을위한 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는 과정은 그 환경을 제거, 종료 변수 (또는 전체 가상 환경) 전체에 액세스 할 필요없이 파이썬 프로세스가 계속 진행됩니다.

그래서 질문은 : 어떻게 파이썬 프로세스가 종료 될 때 죽는 환경 변수를 설정할 수 있습니까?

+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') 
관련 문제