2010-03-17 14 views
1

J'ai un CGI python qui exécute un script en arrière-plan et affiche le stdout dans la page html. Je cours le manuscrit quand l'utilisateur clique sur un bouton dans la page.Exécution d'un script python en arrière-plan à partir d'un CGI

Mon problème est lorsque le script démarre, la page devient occupée et l'utilisateur ne peut pas utiliser les autres fonctionnalités côté client dans la page. Ce que je veux est: Le script devrait fonctionner en arrière-plan lorsque l'utilisateur clique sur le bouton et devrait informer le CGI lorsque l'exécution est terminée. Ensuite, l'émission CGI devrait exécuter la sortie standard du script.

Comment cela peut-il être fait?

Répondre

2

bien, réponse courte: vous ne pouvez pas.

réponse moyenne: CGI est nul. Réponse longue: CGI fonctionne en exécutant votre script et en renvoyant tout ce que votre script imprime au navigateur. Si votre script est toujours en cours d'exécution, le navigateur attendra. Si votre script lance un travail d'arrière-plan et renvoie des données au navigateur, le travail d'arrière-plan ne peut pas notifier le script CGI car cela est déjà fait.

Vous devez choisir une autre solution.

Enregistrez les résultats du travail d'arrière-plan dans un fichier, une base de données ou un autre stockage persistant et demandez à l'utilisateur de demander ces données en utilisant un autre lien de votre page qui exécute un code différent qui récupère les résultats enregistrés. leur.

Une autre méthode consiste à utiliser les techniques AJAX dans le navigateur. Ecrire le code javascript pour faire la demande aux données en arrière-plan. Ainsi, le navigateur peut toujours être réactif avec d'autres éléments de la page pendant l'exécution du script.

+0

Thans nosklo. Existe-t-il un moyen pour que mon CGI affiche une icône de chargement quand il exécute le script au lieu de simplement avoir l'air occupé? – Cagey

+0

@Cagey: Cela se fait normalement en utilisant javascript pour faire la requête (AJAX). – nosklo

+0

Merci pour votre aide nosklo. C'était très utile :) – Cagey

Questions connexes