Va bene, sono riuscito a farlo funzionare come voglio (anche se alcuni/molti potrebbero non essere d'accordo con il metodo). Ho usato Flask come raccomandato di seguito. La parte che potrebbe essere considerata "errata" è il ciclo di verifica 404. Non è una progettazione corretta e genera un errore di "script bloccato" in alcuni browser se continua per troppo tempo. Tuttavia, lo script che voglio eseguire non dura abbastanza a lungo per essere un problema.Creare un collegamento ipertestuale (o pulsante) che esegue uno script python e quindi reindirizza al termine dello script
Grazie per l'aiuto e per favore fatemi sapere se avete altri suggerimenti.
Flask App:
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>
domanda originale:
io sono un principiante/programmatore Python intermedio e uno sviluppatore web che inizia quindi per favore essere gentile . Cosa voglio: Un utente fa clic su un collegamento ipertestuale e viene indirizzato a una pagina Web intermedia che dice qualcosa come "Elaborazione in corso ...". In background (sul server) questo link attiva uno script python che elabora un file e crea una nuova pagina web. Al termine dello script, l'utente viene reindirizzato alla pagina appena creata. Cosa ho: Ho uno script che esegue l'elaborazione e sputa una nuova pagina. Quello che non ho capito è come attivare lo script Python e quindi attivare il reindirizzamento al completamento dello script. Ho esaminato framework web come django e scripting cgi. Ma non ho trovato nulla che ritenga adatto al conto. È molto probabile che mi manchi qualcosa di completamente ovvio, quindi apprezzerei davvero qualsiasi aiuto. Grazie.
Quello che stai descrivendo richiede la scrittura di contenuti web nuovi di zecca su un file su disco e poi servirlo. Questo è abbastanza insolito. Il flusso standard sarebbe più simile a: 1. fare clic sul pulsante e avviare la richiesta di pagina dal server. 2. il backend PHP per la pagina richiesta elabora le informazioni querystring/form/cookie nella richiesta e genera contenuto dinamico nella pagina richiesta. 3. la pagina viene inviata all'utente. Sei sicuro che non è quello che vuoi? – jatrim
Sono sicuro. So che quello che sto tentando è insolito. Ecco perché ho bisogno di aiuto. :) – bem3ry
La tua funzione di pausa è davvero pessima e dannosa e spreca grandi cicli di CPU. Usa invece 'setTimeout'. Inoltre, la tua versione funziona solo per generare un file e non tiene conto di più persone che visitano la tua pagina allo stesso tempo, potrebbero provare a generare il file contemporaneamente. Forse controlla se il file esiste già prima di eseguire lo script. – mensi