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
Bug report
Bug description:
To reproduce
On my system, I have set the
BROWSERenvironment variable to suggest a preferred browser for console applications to use.As a consequence, calls to
webbrowser.openlaunch Firefox Deverloper Edition (firefox-aurora), which is correct. However, if an instance offirefox-auroraisn't already running, my script will freeze untilfirefox-auroraexits entirely.Additionally, interrupting my script using
Ctrl+Ccauses the browser to crash, likely due to aSIGHUP.This causes significant issues for my script, as I wish to open multiple sites at once.
Suggested fix
The browser defined by the
BROWSERvariable should be disowned by thewebbrowser, perhaps by making it aUnixBrowserrather than aGenericBrowser. 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 top.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
BROWSERvariable is intended for terminal-based browsers, similarly to theEDITORvariable for terminal editors and theVISUALvariable for graphical editors.CPython versions tested on:
3.12
Operating systems tested on:
Linux (specifically, Fedora 40)
Linked PRs