Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从ConfigParse返回可用值_Python - Fatal编程技术网

Python 从ConfigParse返回可用值

Python 从ConfigParse返回可用值,python,Python,使用下面描述的代码,我可以成功地检索存储在file.cfg中的属性,但是如何将输出用于其他变量 from ConfigParser import SafeConfigParser class Main: def get_properties(self, section, *variables): cfgFile = 'c:\file.cfg' parser = SafeConfigParser() parser.read(cfgFile)

使用下面描述的代码,我可以成功地检索存储在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
您收到了dict对象
config_vars
,因此可以使用配置变量作为dict的值:

 >>> print config_vars["dbname"]
 sample
 >>> print config_vars["host"]
 localhost

请阅读中有关python词典的更多信息。

我建议采用以下方法:

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
语法访问属性


在7分钟内接受您的答案。谢谢你的直接回答。谢谢你提供的信息,我会保留这个以备将来参考。
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()