python-2.7之读取存储在 .ini 文件中的信息
我正在用 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):
,但这对我来说毫无意义。 This和 this页面使用 ConfigParser.ConfigParser()
,但我也没有让它工作。
我在这方面还很陌生,所以请您尽可能明确一点好吗?
请您参考如下方法:
好问题。 Pyramid 可以使用 PasteDeploy 配置文件进行应用程序配置。因此它提供 pyramid.paster为了那个原因。假设您想在第一次运行 Web 应用程序之前设置数据库表,或者有一个每天运行的维护脚本。您还希望这两个脚本都从 development.ini/production.ini 获取连接字符串。这被认为是良好做法。
这是您已知的常见 yourwebapp.__init__.py
。 PasteDeploy 配置通过运行 bin\pserve development.ini
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 内容。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。