`webbrowser.open` hangs indefinitely when exiting browser defined in `BROWSER` environment variable
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 35.9k
- Métriques de merge des PR
- Métriques de PR en attente
Description
Bug report
Bug description:
To reproduce
On my system, I have set the BROWSER environment variable to suggest a preferred browser for console applications to use.
# my .zshrc
# Use Firefox Dev Edition as my preferred browser if it's on the path
if command -pv firefox-aurora &> /dev/null; then
export BROWSER='firefox-aurora'
elif command -pv firefox &> /dev/null; then
export BROWSER='firefox'
fi
As a consequence, calls to webbrowser.open launch Firefox Deverloper Edition (firefox-aurora), which is correct. However, if an instance of firefox-aurora isn't already running, my script will freeze until firefox-aurora exits entirely.
import webbrowser
webbrowser.open('https://example.com')
print('Done')
Additionally, interrupting my script using Ctrl+C causes the browser to crash, likely due to a SIGHUP.
This causes significant issues for my script, as I wish to open multiple sites at once.
Suggested fix
The browser defined by the BROWSER variable should be disowned by the webbrowser , perhaps by making it a UnixBrowser rather than a GenericBrowser. This does risk breaking terminal-based browsers, so I wonder if there's a way to determine if the browser is terminal-based so that we can tell whether to p.wait() or not.
Otherwise, do you believe this may be an issue with Firefox instead, in that they should launch and detach a new process, allowing the process launched through Python to exit immediately?
One more possibility is that the BROWSER variable is intended for terminal-based browsers, similarly to the EDITOR variable for terminal editors and the VISUAL variable for graphical editors.
CPython versions tested on:
3.12
Operating systems tested on:
Linux (specifically, Fedora 40)
Linked PRs
- gh-149255
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par examiner la PR liée gh-149255, puis inspectez le point d’entrée webbrowser.open et la manière dont il gère la variable d’environnement BROWSER. Reproduisez le script fourni sous Linux avec Firefox configuré et considérez l’issue comme terminée lorsque le lancement du navigateur configuré rend la main rapidement sans que Ctrl+C ne provoque de plantage, avec la couverture appropriée pour les navigateurs de terminal.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- desktop-dev
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 25/100