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 !
`shutdown_flag` ne se met pas toujours à True lors de la fermeture de l'onglet - Besoin d'aide pour débogage
Re: `shutdown_flag` ne se met pas toujours à True lors de la fermeture de l'onglet - Besoin d'aide pour débogage
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 :
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
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.
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
Qui est en ligne ?
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité