Bien, logré que funcionara como yo quisiera (aunque algunos/la mayoría podrían estar en desacuerdo con el método). Utilicé Flask como se recomienda a continuación. La parte que podría considerarse "incorrecta" es el ciclo de verificación 404. No es un diseño apropiado y provoca un error de "script pegado" en algunos navegadores si continúa durante demasiado tiempo. Sin embargo, el script que quiero ejecutar no dura lo suficiente como para que sea un problema.Crear un hipervínculo (o botón) que ejecuta una secuencia de comandos python y luego redirige cuando la secuencia de comandos completa
Gracias por la ayuda y háganos saber si tiene alguna otra sugerencia.
Frasco Aplicación:
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>
pregunta original:
Soy un/programador Python intermedio principiante y un desarrollador web que comienza así que por favor ser suave . Lo que quiero: Un usuario hace clic en un hipervínculo y se lo lleva a una página web intermedia que dice algo así como "Procesando ...". En el fondo (en el servidor), este enlace desencadena una secuencia de comandos python que procesa un archivo y crea una nueva página web. Al completar la secuencia de comandos, el usuario se redirige a la página recién creada. Lo que tengo: Tengo un script que procesa y escupe una nueva página. Lo que no he descubierto es cómo activar el script de python y luego desencadenar el redireccionamiento al finalizar el script. He visto frameworks web como django y cgi scripting. Pero no he encontrado nada que me parezca adecuado. Es muy posible que me esté perdiendo algo completamente obvio, así que realmente agradecería cualquier ayuda. Gracias.
Lo que está describiendo requiere escribir un nuevo contenido web en un archivo en disco y luego servirlo. Esto es bastante inusual El flujo estándar sería más parecido a: 1. hacer clic en el botón y activar la solicitud de página del servidor. 2. El backend de PHP para la página solicitada procesa la información querystring/form/cookie en la solicitud y genera contenido dinámico en la página solicitada. 3. la página se envía al usuario. ¿Estás seguro de que no es lo que quieres? – jatrim
Estoy seguro. Sé que lo que intento es inusual. Es por eso que necesito ayuda. :) – bem3ry
Su función de pausa es realmente muy mala y dañina y desperdicia los ciclos de la CPU a lo grande. Use 'setTimeout' en su lugar. Además, su versión solo funciona para generar un archivo y no cuenta para varias personas que visitan su página al mismo tiempo, pueden intentar generar el archivo al mismo tiempo. Quizás verifique si el archivo ya existe antes de ejecutar el script. – mensi