将配置文件作为参数传递给配置解析模块

问题描述 投票:0回答:2

我的脚本应该这样调用:

# python start.py --config=start.cfg

所以我有三个文件:

start.py

import argparse                                                                 
import options                                                                  

parser = argparse.ArgumentParser(prog='mystart')                                
parser.add_argument("-f", "--file", dest="filename",                            
                    help="write report to FILE", metavar="FILE")                

args = parser.parse_args()                                                      
ConfigFile = args.filename                                                      

test = options.getTest()                                                        

print test

选项.py

from ConfigReader import getConfigValue as getVal                               


def getTest():                                                                  
    Test = getVal('main', 'test')                                               
    return Test 

ConfigReader.py

import os                                                                       
import ConfigParser                                                             


def config():                                                                   
    cfg = ConfigParser.ConfigParser()                                           
    for f in ('default.cfg',):                                                  
        if os.path.exists(f):                                                   
            cfg.read(f)                                                         
            return cfg                                                          
    return None                                                                 


def getConfigValue(Section, Option):                                            
    cfg = config()                                                              
    if cfg.has_option(Section, Option):                                         
        return cfg.get(Section, Option)                                         
    else:                                                                       
        return None

如您所见,我的配置文件硬编码在我的模块 ConfigReader.py 中。 我现在如何将我的 var ConfigFile 传递到我的模块中?

这只是一个简单的例子。我有一堆文件也应该访问这个变量。

全局变量是一个选项吗?还有别的办法吗?

python python-2.7 argument-passing
2个回答
0
投票

开始.py

...
options.ConfigFile = args.filename
... 

选项.py

from ConfigReader import getConfigValue as getVal, ConfigFile                               

def getTest():                                                                  
    Test = getVal('main', 'test')                                               
    return Test 

ConfigReader.py

import os                                                                       
import ConfigParser                                                             

ConfigFile='default.cfg'  
def config():                                                                   
    cfg = ConfigParser.ConfigParser()                                           
    for f in set(['default.cfg',ConfigFile]):                                                  
        if os.path.exists(f):                                                   
            cfg.read(f)                                                         
            return cfg                                                          
    return None                                                                 


def getConfigValue(Section, Option):                                            
    cfg = config()                                                              
    if cfg.has_option(Section, Option):                                         
        return cfg.get(Section, Option)                                         
    else:                                                                       
        return None

0
投票

我找到了适合我的解决方案。

start.py

[...]
import ConfigRader
[...]
ConfigReader.LoadConfigFile(args.filename)

ConfigReader.py

[...]
_ConfigFile = None                                                              
def LoadConfigFile(File):                                                          
    if not File:                                                                
        File = 'default.cfg'                                                    
    global _ConfigFile                                                          
    _ConfigFile = File
[...]
© www.soinside.com 2019 - 2024. All rights reserved.