Windows系统WSL/Ubuntu环境下如何使用Python的webbrowser.open()?
在WSL/Ubuntu中使用Python webbrowser.open()无法打开Windows默认浏览器的解决方案
问题场景
在Windows机器上通过VS Code使用WSL/Ubuntu开发Python时,执行以下代码无任何反应且返回False:
import webbrowser webbrowser.open('https://inventwithpython.com/')
核心原因是Linux子系统无法直接访问Windows系统设置的默认浏览器。目前有临时解决方案,但存在兼容性顾虑:
import subprocess subprocess.run(["cmd.exe", "/c", "start", "https://inventwithpython.com/"])
基于webbrowser.open()的可行方案
方案1:配置WSL默认浏览器指向Windows浏览器
在WSL的shell中执行以下命令,将默认浏览器绑定到Windows端的浏览器(以Edge为例):
echo "export BROWSER='/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe'" >> ~/.bashrc source ~/.bashrc
如果使用Chrome,替换路径为/mnt/c/Program Files/Google/Chrome/Application/chrome.exe。配置完成后,直接调用webbrowser.open()即可正常打开Windows默认浏览器。
方案2:在Python代码中直接指定浏览器路径
在代码中明确指定Windows浏览器的WSL挂载路径,绕过系统默认检测:
import webbrowser # Edge浏览器示例 browser_path = '/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe %s' webbrowser.get(browser_path).open('https://inventwithpython.com/') # Chrome浏览器示例 # browser_path = '/mnt/c/Program Files/Google/Chrome/Application/chrome.exe %s' # webbrowser.get(browser_path).open('https://inventwithpython.com/')
方案3:关联WSL的xdg-open到Windows start命令
通过修改shell配置,让WSL的xdg-open工具调用Windows的start命令,webbrowser模块会默认使用xdg-open打开链接:
echo "xdg-open() { cmd.exe /c start \"\$*\" > /dev/null 2>&1; }" >> ~/.bashrc source ~/.bashrc
配置后无需修改Python代码,直接使用webbrowser.open()即可触发Windows默认浏览器。
这些方案既保留了webbrowser.open()的原生API,又适配了WSL与Windows的跨环境调用,兼容性优于临时的subprocess方案。
内容的提问来源于stack exchange,提问作者Jason Sturgeon
相关产品推荐
相关产品推荐

