【发布时间】:2015-02-03 16:27:17
【问题描述】:
我的 Python 应用程序结构是这样的:
run.py
app/__init.py__
app/config.py
app/<other modules in app>
在我的app/__init.py 中,我想检查一个变量DEBUG_MODE 并根据它的值,如果DEBUG_MODE == False,则启动一个python Logger,如果它是True,则简单地打印到控制台。我目前尝试(但不工作)的解决方案是拥有三个文件:
app/config.py
DEBUG_MODE = False
app/__init__.py
app = MyApp()
from config import DEBUG_MODE
app.debug = DEBUG_MODE
if not app.debug:
import logging
...
运行.py
from app import config
config.DEBUG_MODE = True
from app import app
当然,问题是当我的代码到达config.DEBUG_MODE=True 时,app 模块的初始化代码已经被调用,因为我的配置文件是应用程序模块的一部分。
我如何告诉模块我想从我的 run.py 脚本在运行时启用调试?
【问题讨论】:
-
你要从命令行运行这个吗?
-
最初,出于调试目的,是的。稍后我会将它作为 CGI 运行,在这种情况下不会设置 DEBUG_MODE(并且会发生基于文件的日志记录)。但是现在,当我开发它时,它将从命令行运行。
-
您始终可以使用sys.argv 获取命令行参数并在初始化代码中进行处理。
-
不幸的是,这个应用程序是一个 Flask 应用程序,run.py 脚本所做的最后一件事是启动 Flask 应用程序管理器(它使用命令行参数来确定要做什么)。可能有一种方法可以重新构建它(例如在导入模块后等待设置日志记录),但我想知道我是否可以设置一个变量以在运行时由模块的 __init__ 代码读取。
-
运行时是什么意思?您可以使用配置选项编写一个 .ini 文件,并从 app/__init__.py 文件中处理它......我不知道您可以获得多接近运行时。我有一段时间没有用 python 写太多东西了,但除非我误解了这个问题,如果你想在运行时运行一些东西,把它扔到你的
__init__.py文件中。
标签: python python-2.7 flask global-variables