2014-02-27 38 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

相關問題