-
-
Notifications
You must be signed in to change notification settings - Fork 33.2k
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)