了解しました。希望どおりに機能させることができました(ただし、一部/ほとんどの場合、この方法に同意できない場合があります)。以下の推奨事項に従ってFlaskを使用しました。「間違っている」と見なされる可能性のある部分は、404チェックループです。これは適切な設計ではなく、長時間続くと、一部のブラウザで「スクリプトのスタック」エラーが発生します。しかし、私が実行したいスクリプトは、それが問題になるほど長くは続きません。
助けてくれてありがとう。他に何か提案があれば教えてください。
フラスコアプリ:
import threading
import subprocess
import os
import sys
from flask import Flask
from flask import render_template, abort
app = Flask(__name__)
app.debug = True
def run_script():
theproc = subprocess.Popen([sys.executable, "run_me.py"])
theproc.communicate()
@app.route('/')
def index():
return render_template('index.html')
@app.route('/generate')
def generate():
threading.Thread(target=lambda: run_script()).start()
return render_template('processing.html')
@app.route('/is_done')
def is_done():
hfile = "templates\\itworked.html"
if os.path.isfile(hfile):
return render_template('itworked.html')
else:
abort(404)
if __name__ == "__main__":
app.run()
processing.html:
<!DOCTYPE html>
<html>
<head>
<script src="/static/jquery.min.js"></script>
</head>
<body>
<p>Processing...</p>
<script>
setInterval(function()
{
var http = new XMLHttpRequest();
http.open('HEAD', "is_done", false);
http.send();
if (http.status==200)
window.location.replace("is_done");
},2000);
</script>
</body>
</html>
元の質問:
私は初心者/中級のPythonプログラマーであり、初心者のWeb開発者ですので、優しくしてください。私が欲しいもの:ユーザーがハイパーリンクをクリックすると、「処理中...」のような中間のWebページに移動します。バックグラウンド(サーバー上)では、このリンクにより、ファイルを処理して新しいWebページを作成するPythonスクリプトがトリガーされます。スクリプトが完了すると、ユーザーは新しく作成されたページにリダイレクトされます。私が持っているもの:処理を実行して新しいページを吐き出すスクリプトがあります。私が理解していないのは、Pythonスクリプトをトリガーし、スクリプトの完了時にリダイレクトをトリガーする方法です。djangoやcgiスクリプトなどのWebフレームワークを見てきました。しかし、私は自分が法案に合うと思うものを何も見つけていません。完全に明白な何かを見逃している可能性が非常に高いので、助けていただければ幸いです。