私はテストスイートの一部としてプロセスとしてフラスコサーバーを起動しようとしています。os.execl * os.systemと同じフラスコを起動していません
import os
if __name__=='__main__'
pth = "/fullpath/to/myapp.py"
d,f = os.path.split(pth)
os.chdir(d) # Not necessary (flash can launch from anywhere when full path in FLASK_APP
os.environ["FLASK_APP"] = pth
os.environ["FLASK_DEBUG"] = "1"
# os.system("/usr/local/bin/flask run") # Succeeds!
os.execl("/usr/local/bin/flask", "run") # Fails. Why ????!!
フラスコは、(我々は/ usr/local/bin /フラスコを見つける。)実行されますが、以下の私の標準的な使用方法の誤りを与えるが、間違っているものを言いません。
os.execlをos.system("/usr/local/bin/flask run")
に置き換えると機能します。代わりに '/ use/bin/env'を実行すると、FLASK_APPとFLASK_DEBUGが正しく設定されていることを検証できます。実行した場合:
FLASK_APP=/fullpath/to/myapp.py FLASK_DEBUG=1 /usr/local/bin/flask
...すべてが動作します。なぜos.systemがos.exec *がフラスコに何かが間違っていると思うところで働くでしょうか?
(PS。私のテストフレームワークでは、親プロセスの現在のPIDをキャプチャしているので、私はexecを使用したいのですが、テストが完了したらSIGINTを実行します。新しいPIDとフラッシュは私のSIGINTを取得しません)。
PPS。また、os.enivironをos.exec*e
の亜種に渡してみました。運がない。ゼロ番目の引数(arg0
)は、パスと同じにする必要があるためです
Usage: flask [OPTIONS] COMMAND [ARGS]...
This shell command acts as general utility script for Flask applications.
It loads the application configured (through the FLASK_APP environment
variable) and then provides commands either provided by the application or
Flask itself.
The most useful commands are the "run" and "shell" command.
Example usage:
$ export FLASK_APP=hello.py
$ export FLASK_DEBUG=1
$ flask run
Options:
--version Show the flask version
--help Show this message and exit.
Commands:
run Runs a development server.
shell Runs a shell in the app context.
(https://docs.python.org/2/library/os.html#os.execl)... *いずれの場合においても、子プロセスへの引数は、実行されているコマンドの名前で開始する必要があります* – donkopotamus
ええ、私はあなたが正しいと技術的には思っていますが、いくつかの例ではそこでの使用方法を明らかにするには長い道のりがあります。 – user48956
ああ私は同意する...私は 'os.exec * 'のほとんどのユーザーはこのルールを遠くに学ばなければならないと思う:-) – donkopotamus