python-2.7之读取存储在 .ini 文件中的信息

grandyang 阅读:57 2025-02-15 21:57:57 评论:0

我正在用 Python 编写一个 Pyramid 应用程序,我有几个脚本都需要位于 development.ini 中的相同信息

如何从 development.ini 中获取信息并将其分配给另一个脚本中的变量?这样我就可以接受这个

# development.ini 
 
[app:main] 
some.url = some_url 
 
[other_thing] 
info.partA = some_info 
info.partB = some_other_info 

然后把它变成这样

# some_script.py 
 
url = some_url 
infoA = some_info 
infoB = some_other_info 

This page's解决方案使用 def main(global_config, **settings):,但这对我来说毫无意义。 Thisthis页面使用 ConfigParser.ConfigParser(),但我也没有让它工作。

我在这方面还很陌生,所以请您尽可能明确一点好吗?

请您参考如下方法:

好问题。 Pyramid 可以使用 PasteDeploy 配置文件进行应用程序配置。因此它提供 pyramid.paster为了那个原因。假设您想在第一次运行 Web 应用程序之前设置数据库表,或者有一个每天运行的维护脚本。您还希望这两个脚本都从 development.ini/production.ini 获取连接字符串。这被认为是良好做法。

这是您已知的常见 yourwebapp.__init__.py。 PasteDeploy 配置通过运行 bin\pserve development.ini

传递到 main() 函数中
from pyramid.config import Configurator 
 
from sqlalchemy import engine_from_config 
 
from .models import DBSession, Base 
 
def main(global_config, **settings): 
    engine = engine_from_config(settings, 'sqlalchemy.') 
    DBSession.configure(bind=engine) 
    Base.metadata.bind = engine 
 
    config = Configurator(settings=settings, 
                          root_factory='tutorial.models.Root') 
    config.include('pyramid_chameleon') 
    config.add_route('wiki_view', '/') 
    config.add_route('wikipage_add', '/add') 
    config.add_route('wikipage_view', '/{uid}') 
    config.add_route('wikipage_edit', '/{uid}/edit') 
    config.add_static_view('deform_static', 'deform:static/') 
    config.scan('.views') 
    return config.make_wsgi_app() 

要在另一个脚本中访问您的应用程序配置,请说 some_script.py 以及使用 pyramid.paster 中的方法来读取设置并从设置中初始化日志记录。

from sqlalchemy import engine_from_config 
 
from pyramid.paster import ( 
    get_appsettings, 
    setup_logging, 
    ) 
 
from .models import ( 
    DBSession, 
    Base, 
    ) 
 
def do_your_stuff(settings) 
    "your custom script logic that extracts a certain settings and does something" 
 
 
 
 
def main(argv=sys.argv): 
    config_uri = argv[1] 
    setup_logging(config_uri) 
    settings = get_appsettings(config_uri) 
    engine = engine_from_config(settings, 'sqlalchemy.') 
    DBSession.configure(bind=engine) 
    Base.metadata.create_all(engine) 
    do_your_stuff(settings) 

要连接您需要的一切,请在 setup.py 中为命令行脚本添加一个入口点。仔细阅读 console_script 部分。您为脚本定义一个名称并指向您的 some_script.py 的“主要”功能。这是您需要为每个应用程序和脚本自定义的。

from setuptools import setup 
 
requires = [ 
    'pyramid', 
    'pyramid_chameleon', 
    'deform', 
    'sqlalchemy', 
    'pyramid_tm', 
    'zope.sqlalchemy' 
] 
 
setup(name='tutorial', 
      install_requires=requires, 
      entry_points="""\ 
      [paste.app_factory] 
      main = tutorial:main 
      [console_scripts] 
      initialize_db = yourwebapp.some_script:main 
      """, 
) 

因为您更改了 setup.py,所以您需要运行以下命令来创建您将在“bin”文件夹(您调用 pserve 的同一文件夹)中找到的控制台脚本。我认为正在运行 virtualenv 是理所当然的。

$ $VENV/bin/python setup.py develop 

然后你可以用你的配置文件运行你的脚本

$ $VENV/bin/initialize_db development.ini 

在生产中采用另一个配置文件。这就是美。

$ $VENV/bin/initialize_db production.ini 

一些第三方库提供了由 paster 配置文件驱动的特殊辅助函数(工厂)。示例是 sqlalchemy,pyramid.zodbconn 通常具有名称如 *_from_config(settings) 的方法。

引用资料

我试着为您缩短了一点。注意其他 Pyramid 应用程序中的 PasteDeploy 主题和 pyramid.paster 内容。


标签:Python
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号