`shutdown_flag` ne se met pas toujours à True lors de la fermeture de l'onglet - Besoin d'aide pour débogage

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
viba1
Arias
Messages : 0
Inscription : 23 mars 2025, 19:34

`shutdown_flag` ne se met pas toujours à True lors de la fermeture de l'onglet - Besoin d'aide pour débogage

Message par viba1 »

Bonjour à tous,

J'ai développé un script Python simple pour lancer un serveur web et afficher une page HTML dans Firefox. Le code fonctionne correctement si un autre onglet Firefox est ouvert.
Cependant, lorsque je ferme l'onglet contenant la page HTML, la fermeture n'est pas toujours détectée : le `shutdown_flag` reste à `False` et le script continue de tourner indéfiniment.

J'ai constaté que si un autre onglet restait ouvert (et donc firefox aussi) cela fonctionne correctement, mais jamais dans le cas où seul cette page est ouverte et donc sa fermeture entraîne la fermeture de firefox.

Code du script python :
import webbrowser
import time

url = f"http://localhost:8000/index.html"
webbrowser.open(url, new=2) # Open in a new tab

try:
while not self.server.shutdown_flag:
time.sleep(1)
finally:
self.shutdown()

Environnement :
Système d'exploitation : Debian 12
Navigateurs testés :
Firefox 128.8esr (natif Debian 12)
Firefox 136.0.2 (flatpak)
Autres navigateurs : Chromium, Vivaldi (fonctionnent correctement)

Reproductibilité
J'aimerais savoir si d'autres utilisateurs rencontrent le même problème avec Firefox.
Si oui, cela pourrait faire penser à un bug ou à un autre signal en cas de fermeture de Firefox.

Demande d'aide :
Avez-vous des idées sur la manière de rendre le `shutdown_flag` détectable lorsque l'onglet Firefox contenant la page HTML est fermé ?
Est-ce qu'il existe une méthode alternative pour détecter la fermeture d'un onglet Firefox dans un script Python ?

Informations supplémentaires :

J'ai testé avec le même scrip avec d'autres navigateurs (Chromium, Vivaldi) qui fonctionnent correctement.
J'ai vérifié que le code est correctement exécuté : le serveur web est bien lancé et la page est correctement affichée.

Merci d'avance pour vos idées !
Zials
Arias
Messages : 0
Inscription : 24 avr. 2025, 06:21

Re: `shutdown_flag` ne se met pas toujours à True lors de la fermeture de l'onglet - Besoin d'aide pour débogage

Message par Zials »

Salut,
Ton problème vient du fait que webbrowser.open() n'établit aucun lien entre ton script Python et l'état de Firefox. Quand Firefox se ferme (et pas juste un onglet), ton script ne reçoit pas d'information.

Deux solutions simples :
  • Ajoute un ping régulier depuis la page HTML vers ton serveur Python. Si le serveur ne reçoit plus de ping après un délai, il peut déclencher l'arrêt.
  • Utilise une connexion WebSocket : la fermeture de la page fermera aussi la connexion, ce qui est détectable côté serveur.
Le comportement que tu constates est connu avec Firefox (gestion des processus différente).
Pour info, il existe aussi des solutions prêtes à l'emploi qui facilitent ce genre de communication serveur/navigateur et même des formations en ligne qui sont assez pratiques.

[modération]
Les liens publicitaires sont interdits ; seules sont admises les mentions à but non lucratif pour des causes orientées Logiciels Libres par exemple, voire humanitaires.
Le lien figurant dans ce message a donc été inhibé.
[/modération]lool-lauris
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité