2017-01-05 2 views
0

저는 Python으로 작성된 명령 줄 응용 프로그램을 작성하고 있습니다. 각 프로필에 적용 할 몇 가지 다른 값이있는 프로필 아이디어를 사용하고 싶습니다.명령 줄 응용 프로그램의 응용 프로그램 컨텍스트에있는 변수

나는 이것을 수행하여 properties.ini 파일을 만들고 프로필을 수신하고 일부 변수에 속성을로드하는 기능을 포함하는 config_parser.py 파일을 만듭니다. 그런 다음 사용하기 위해 필요한 모든 파일에서이 파일을 가져옵니다.

응용 프로그램을 실행할 때 프로필을 인수로 전달하고 올바른 속성을로드하여 전체 응용 프로그램의 컨텍스트에 넣고 import config_parser을 피하십시오.

예를 들어, 내 properties.ini에 나는이 다음 config_parser.py에서

[DEFAULT] 
[email protected] 

[e2e_testing] 
[email protected] 

내가 가진 :

import configparser 

config = configparser.ConfigParser() 
config.read('properties.ini') 

GLOBAL_EMAIL = '' 

def load_config(profile): 
    global GLOBAL_EMAIL 

    GLOBAL_EMAIL = config[profile]['GLOBAL_EMAIL'] 

을 그리고 모든 스크립트 나 속성을 사용할 필요가 나는 수행

from application import config_parser as CFG 

def method(profile): 
    CFG.load_config(profile) 
    print CFG.GLOBAL_EMAIL 

이상적으로이 구성을 실행 중에로드하고 싶습니다. main.py (내 응용 프로그램의 진입 점)을 작성한 다음 패키지 전체에서 모듈을 공유하므로 어디서나 config_parser을 가져 오거나 profile 변수를 전달할 필요가 없습니다.

이 나는 ​​약 __builtin__를 읽고 config_parser__builtin__에 변수를 추가 (그래서 그들은 그 패키지의 모든 모듈에 사용할 수있을 것입니다) 만드는 방법에 대한 생각,하지만 난 __builtin__ 이후 어떻게 Pytest와 단위 테스트에 확실하지 않다 것이다 소스 폴더에있는 모듈에서만 사용할 수 있어야하며 어떻게 든 모의해야합니다.

미리 감사드립니다.

+0

config를 main.py에서 한 번 분석하고 그 결과를 모든 모듈에 전달하는 것은 어떻습니까? – ThisSuitIsBlackNot

답변

0

하나의 프로세스 또는 프로세스 그룹에서 하나의 프로필을 실행할 계획입니까? 그렇다면 환경 변수를 사용할 수 있습니다 :

# main.py 
import os 
def load_config(): 
    os.environ["GLOBAL_EMAIL"] = config[profile]['GLOBAL_EMAIL'] 

# module.py 
def modfunc(): 
    email = os.environ["GLOBAL_EMAIL"]