Flaskエンドポイントを通して、スクリプトのstdoutをにストリームしようとしています。FlaskのPopenがPythonインタプリタを起動します
私は出発点としてthis SO答えを使用しています。そのスクリプトは私のためにうまくいった。ここのコードは、 "dmesg"の代わりにPythonスクリプトを直接呼び出すことを除いて、実質的にその答えと同じです。私が移動するとmyscript.pyが
import subprocess
def main():
subprocess.Popen(['dmesg'], shell=True, stdout=subprocess.PIPE)
if __name__ == '__main__':
main()
私は「このページに到達することはできません」というエラーを取得し、私のブラウザで「/歩留まり」、およびフラスコテストサーバーに内に落下
@app.route('/yield')
def index():
def inner():
proc = subprocess.Popen(
['python', 'myscript.py'],
shell=True,
stdout=subprocess.PIPE
)
for line in iter(proc.stdout.readline,''):
time.sleep(1)
yield line.rstrip() + '<br/>\n'
return Flask.Response(inner(), mimetype='text/html')
Pythonインタプリタ(下記参照)と他に何も起こりません。
* Running on http://0.0.0.0:7000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger pin code: 262-399-135
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
私はフラスコ経由のストリーミング用のPythonスクリプトを呼び出すために上記の中で何を修正できますか?
'yield'は内部関数にあるべきです。 – syntonym
@syntonymそれは、SOの質問の私の部分のタイプミスです。今修正。利回りは私の実際の関数の内部関数にあります。 – ABM
'' myscript.py'の終わりの引用符がありません - 投稿やコードの入力ミスですか? – CAB