とても簡単だと思っていたことがどうやってできるのか、少し混乱しています。を使用して作成された簡単なアプリがありFlask
ます。これは次のようになります。
from flask import Flask
app = Flask(__name__)
def _run_on_start(a_string):
print "doing something important with %s" % a_string
@app.route('/')
def root():
return 'hello world'
if __name__ == "__main__":
if len(sys.argv) < 2:
raise Exception("Must provide domain for application execution.")
else:
DOM = sys.argv[1]
_run_on_start("%s" % DOM)
app.run(debug=True)
私が見つけたのは、私の端末が_run_on_start
他の通常のFlaskアプリデバッグコードではなくprintステートメントを出力しているということです。app.runの前に呼び出しを削除すると、出力は正常です。さらに、の出力が_run_on_start
起動時に2回繰り返されることがわかりましたが、それが奇妙な出力なのか、関数が実際に2回呼び出されているのかはわかりません。
これは、を呼び出す前に関数呼び出しを追加する正しい方法ではないと思いますapp.run
。Flaskのドキュメントを調べたところ、特定のリクエストの前後に関数を実行できるさまざまなデコレータについての言及が見つかりましたが、アプリサーバーの実行時に呼び出しを実行したいと思います。
さらに、このモジュールを別のモジュールから呼び出す場合、つまり、への呼び出しがない場合__name__ != "__main__"
はそうではないことに気付きます_run_on_start
。
ここでの正しいアプローチは何ですか?CLと別のモジュールから開始する場合はどちらの場合も?