2017-05-05 12 views
0

私はシェルスクリプトを実行しているレスポンスオブジェクトを返すことでライブ出力を表示しているWebアプリケーションで作業しています。シェルスクリプトの実行が終了したら別のページにリダイレクトする方法はありますか?Flask:Flaskレスポンスオブジェクトを返すとリダイレクト

@app.route("/setup", methods=['POST', 'GET']) 
def setup(): 
    def inner(): 
     command = ["./test.bash", "exam"] 
     proc = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True) 
     for line in iter(proc.stdout.readline,''): 
      yield line.rstrip() + '<br/>\n' 
    return Response(inner(), mimetype='text/html') 
    # After this I want to redirect to another page say success.html 

かの方法がある場合、私は、Responseオブジェクト内のテンプレートを含めることができ、私は私がしたいページに移動するためにいくつかのボタンを含めることができます。

私も何かやりたい

for line in iter(proc.stdout.readline,''): 
    if line == "Success": 
     # Redirect to success.html after returning Response object with script output 
    else: 
     # Redirect to error.html after returning Response object with script 

出力

これは可能ですか? 何か助けていただければ幸いです。前もって感謝します。

+1

HTMLページを返すか、別のページにリダイレクトできます。両方を実行しようとすると、ユーザーは即時リダイレクトのために元のHTMLを見ることができなくなります。 –

+0

連続したスクリプトを実行し、そのページからライブ出力を取得したいのですか? –

+0

@AndrewCherevatkin:私はスクリプトからライブ出力を得ることができます。しかし、スクリプトが実行されると、私はいくつかのページにリダイレクトしたい。 –

答えて

1

yield '<script>document.location.href="http://redirect.me"</script>'

終わりに働くかもしれない...ブラウザがストリーミングデータをinterprettingか、それをダンプしている場合に依存。それは一般的に、より良いteqniqueは長時間実行されるタスクのためにセロリのようなものを使用してからjsを使ってサーバーを調べて完了したかどうかを確認することです。

関連する問題