Python 2.7 读取存储在.ini文件中的信息
我正在用Python编写一个金字塔应用程序,我有几个脚本都需要development.ini中的相同信息 如何从development.ini获取信息并将其分配给另一个脚本中的变量?这样我就可以拿这个了Python 2.7 读取存储在.ini文件中的信息,python-2.7,pyramid,Python 2.7,Pyramid,我正在用Python编写一个金字塔应用程序,我有几个脚本都需要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 =
# 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
解决方案使用defmain(全局配置,**设置):
,但这对我来说毫无意义。
页面使用ConfigParser.ConfigParser()
,但我也不能让它工作
我对这方面还不太熟悉,所以请你尽可能清楚地说出来好吗
这个页面的解决方案使用defmain(全局配置,**设置):,但这对我来说毫无意义
发件人:
请注意,作为**设置传递给Configurator构造函数的值的扩展版本将在金字塔视图可调用代码中作为request.registry.settings提供。您可以通过查看代码创建希望稍后访问的对象,并将它们作为设置放入传递给configurator的字典中。然后,它们将在应用程序运行时出现在request.registry.settings字典中
在所使用的ini
文件中[app:main]
中设置的变量可通过request.registry.settings
dict在应用程序中访问
好问题。金字塔可以使用PasteDeploy配置文件进行应用程序配置。因此,它提供了这样的机会。假设您想在首次运行Web应用程序之前设置数据库表,或者有一个日常运行的维护脚本。您希望两个脚本也从development.ini/production.ini获取连接字符串。这被认为是良好的做法 这是一个常见的
yourwebapp.\uuuuu init\uuuuuuuuuy
你已经知道了。通过运行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中为命令行脚本添加入口点。仔细阅读控制台脚本
部分。为脚本定义一个名称,并指向some_script.py的“main”函数。这是您需要为每个应用程序和脚本自定义的目标
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的文件夹相同)。我想当然地认为他们在运行一个虚拟电视
$ $VENV/bin/python setup.py develop
之后,可以使用配置文件运行脚本
$ $VENV/bin/initialize_db development.ini
在生产中,获取另一个配置文件。这就是美
$ $VENV/bin/initialize_db production.ini
一些第三方库提供了由粘贴器配置文件驱动的特殊帮助函数(工厂)。例如sqlalchemy,pyramid.zodbconn通常有名称为*\u from_config(settings)
的方法
参考资料
import ConfigParser
config = ConfigParser.ConfigParser()
config.read("development.ini")
dConfig = config.__dict__['_sections'].copy()
url = dConfig['app:main']['some.url']
infoA = dConfig['other_thing']['info.partA']
infoB = dConfig['other_thing']['info.partB']
现在等于
url = some_url
infoA = some_info
infoB = some_other_info
如果东西处于development.ini
或production.ini
和[app:main]
中,则:
info=self.request.registry.settings[“info”]您可以使用
设置中有一个“mongo_uri”示例
settings/development.ini:
[app:main]
use = egg:gps_tracker
mongo_uri = mongodb://localhost:27017/gps
db.py:
from urllib.parse import urlparse
import pymongo
def includeme(config):
settings = config.get_settings()
mongo_db_url = urlparse(settings['mongo_uri'])
settings['mongo_db_url'] = mongo_db_url
settings['mongo_db_name'] = mongo_db_url.path[1:]
settings['mongo_hostname'] = mongo_db_url.hostname
settings['mongo_port'] = int(mongo_db_url.port or 27017)
connection = pymongo.MongoClient(host=mongo_db_url.hostname,
port=mongo_db_url.port)
config.registry.mongo_connection = connection
我建议将重点放在ConfigParser.ConfigParser()
的问题上。这有什么问题?这个答案提供了一个很好的ConfigParser使用示例:对于使用PasteDeploy的金字塔框架,使用Python的ConfigParser模块可能是一种太低级的方法,会导致出现错误。pyramid.paster为*.ini文件中的内容提供了适当的抽象。我认为OP有一个脚本,他们希望从pyramid应用程序使用的.ini
文件中访问一些信息,例如,连接到同一个数据库。脚本中不会有任何请求.注册表.设置
。啊,是的。我试过一次阅读理解,很难。谢谢你的更正。如果这对你目前的发展有用的话,那就试试吧。请记住我稍后在将应用程序部署到Linux/Windows系统时的回答。然后,PasteDeploy控制台脚本变得非常有用。您只需使用setuptools安装软件包,脚本(或Windows上的*.exe)即可进入bin
文件夹。令人惊叹的。