我需要在主函数中提取配置文件:
def main(global_config, **settings):
""" This function returns a Pyramid WSGI application.
"""
parser = SafeConfigParser()
ret = parser.read('/var/www/finance/corefinance/database.ini')
connstring = parser.get('postgres', 'connstring')
settings['sqlalchemy.url'] = connstring
database.ini的位置比 init .py
的位置高一级我以为我可以使用" ../ database.ini",但这不起作用。唯一有效的是投入整条道路。如何避免在此文件中放入完整路径?
答案 0 :(得分:5)
当然,在 __ init __。py 中,你可以使用项目父目录的字符串表示来定义一个变量:
project_dir = '/var/www/finance/corefinance/'
但我相信你并没有要求SO得到这样的答案。
另一种方法是在 development.ini 和 production.ini 的[app:main]
部分添加类似于以下内容的内容:
project_dir = %(here)s/mycoolwebsite
或者甚至只是:
project_dir = %(here)s
然后在 __ init __。py (以及您要引用项目父目录的任何其他位置),您可以使用以下命令检索该值:
project_dir = config.registry.settings['project_dir']
有关自定义变量的详细信息,请参阅:http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html#adding-a-custom-setting
答案 1 :(得分:1)
如果你想将它作为参数传递,你当然可以使用argv并使用os.path解析路径
import os
import sys
...
path = os.path.abspath(sys.argv[1])
ret = parser.read(path)
...
答案 2 :(得分:1)
我终于根据@ tag的想法开始工作了:
def main(global_config, **settings):
""" This function returns a Pyramid WSGI application.
"""
parser = SafeConfigParser()
iniloc = os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..', 'database.ini'))
read_list = parser.read(iniloc)
connstring = parser.get('postgres', 'connstring')
settings['sqlalchemy.url'] = connstring