使用下面描述的代码,我可以成功检索存储在file.cfg中的属性,但是如何将输出用于其他变量?
from ConfigParser import SafeConfigParser
class Main:
def get_properties(self, section, *variables):
cfgFile = 'c:\file.cfg'
parser = SafeConfigParser()
parser.read(cfgFile)
properties= variables
return {
variable : parser.get(section,variable) for variable in properties
}
def run_me(self):
config_vars= self.get_properties('database','host','dbname')
print config_vars
op=Main()
op.run_me()
我还在学习Python,但我不确定如何将输出设置为单个变量:
当前输出:
{'host': 'localhost', 'dbname': 'sample'}
我想拥有什么:
db_host = localhost
db_name = sample
答案 0 :(得分:2)
def run_me(self):
config_vars= self.get_properties('database','host','dbname')
for key, value in config_vars.items():
print key, "=", value
你收到了dict-object config_vars
,所以你可以使用配置变量作为dict的值:
>>> print config_vars["dbname"]
sample
>>> print config_vars["host"]
localhost
在documentation中阅读有关python词典的更多信息。
答案 1 :(得分:1)
我会建议这种方法:
import ConfigParser
import inspect
class DBConfig:
def __init__(self):
self.host = 'localhost'
self.dbname = None
def foo(self): pass
class ConfigProvider:
def __init__(self, cfg):
self.cfg = cfg
def update(self, section, cfg):
for name, value in inspect.getmembers(cfg):
if name[0:2] == '__' or inspect.ismethod(value):
continue
#print name
if self.cfg.has_option(section, name):
setattr(cfg, name, self.cfg.get(section, name))
class Main:
def __init__(self, dbConfig):
self.dbConfig = dbConfig
def run_me(self):
print('Connecting to %s:%s...' % (self.dbConfig.host, self.dbConfig.dbname))
config = ConfigParser.RawConfigParser()
config.add_section('Demo')
#config.set('Demo', 'host', 'domain.com')
config.set('Demo', 'dbname', 'sample')
configProvider = ConfigProvider(config)
dbConfig = DBConfig()
configProvider.update('Demo', dbConfig)
main = Main(dbConfig)
main.run_me()
这个想法是你收集一个类中的所有重要属性(你也可以设置默认值)。
然后方法ConfigProvider.update()
将使用配置中的值覆盖那些(如果存在)。
这允许您使用简单的obj.name
语法访问属性。