2014-02-27 21 views
1

基本上,我有一个生成一个后台进程做一些工作,我基于瓶的应用程序的一小部分。在生产环境中,我只想要suprocess.Popen并“忽略”该子流程会发生什么。但是在开发过程中我想在什么情况下不我错捕有它的一个更好的机会来使用,而不是check_output使。是否有可能有瓶/ WERKZEUG汽车reloader尊重-O优化标志

为了确定是否要使用check_output我只是把它包在一个if __debug__,这或多或少翻译成:

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__显示它确实设置为Truesys.flags全为零。

所以我的问题是:有没有办法强迫瓶/ WERKZEUG汽车reloader尊重最初传递给Python的标志?

禁用自动重新加载意味着-O标志被使用,但这样做是一个小的不便,我宁愿不处理它有一个更好的方法。

回答

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) 
+0

用'运行(调试=假use_reloader = TRUE)'最终取得我想要的东西利用这个。谢谢。 – Hollinski

相关问题