基本上,我有一小部分基于Flask的应用程序,它产生了一个后台进程来完成一些工作。在生产环境中,我只想suprocess.Popen
并“忽略”该子流程会发生什么。但是在开发过程中我想使用check_output
代替,以防万一 出错我有更好的机会抓住它。
为了确定是否使用check_output
,我只需将其包装在if __debug__
中,或多或少地转换为:{/ p>
def spawn_process():
if __debug__:
subprocess.check_output(args, stderr=subprocess.STDOUT)
else:
subprocess.Popen(args)
我的印象是,通过这样做,我可以简单地使用-O
Python标志来获得开发期间的替代行为 - 在生产中我计划使用mod_wsgi的WSGIPythonOptimize指令获得相同的效果。然而,看起来Flask / Werkzeug的自动重新加载器在生成自己的子进程时会忽略Python标志。调试器中的一个简单的print __debug__
显示它确实设置为True
,sys.flags
全部为零。
所以我的问题是:有没有办法强制Flask / Werkzeug的自动重新加载器尊重最初传递给Python的标志?
禁用自动重新加载确实意味着-O
标志被使用,但这样做是一个小小的不便,我宁愿不处理它有更好的方法。
答案 0 :(得分:1)
我不相信你可以让autoreloader尊重-O标志。但是,您可以检查应用程序中的debug
标志,以决定如何生成子进程:
from flask import current_app
def spawn_process():
if current_app.debug:
subprocess.check_output(args, stderr=subprocess.STDOUT)
else:
subprocess.Popen(args)