【发布时间】:2026-02-16 15:05:02
【问题描述】:
我可以使用什么来调用操作系统以在用户默认使用的任何浏览器中打开 URL? 不担心跨操作系统兼容性;如果它在 linux 中运行,对我来说就足够了!
【问题讨论】:
-
您在寻找什么操作系统,因为 Windows、MacOS 和 Linux 都有不同的调用约定。
标签: python linux url operating-system
我可以使用什么来调用操作系统以在用户默认使用的任何浏览器中打开 URL? 不担心跨操作系统兼容性;如果它在 linux 中运行,对我来说就足够了!
【问题讨论】:
标签: python linux url operating-system
以下是使用给定 url 打开用户默认浏览器的方法:
import webbrowser
webbrowser.open(url[, new=0[, autoraise=True]])
这是有关此功能的文档。它是 Python 标准库的一部分:
http://docs.python.org/library/webbrowser.html
我已经在 Linux Ubuntu 10.10 上成功测试了这个。
【讨论】:
import antigravity 使用的:hg.python.org/cpython/file/tip/Lib/antigravity.py
就我个人而言,我真的不会使用webbrowser 模块。
对于特定浏览器的嗅探是一个复杂的混乱,如果他们安装了多个浏览器,它将找不到用户的默认浏览器,如果它不知道它的名称,它将找不到浏览器(例如铬合金)。
在 Windows 上更好的是使用 os.startfile 函数,该函数也适用于 URL。在 OS X 上,您可以使用open 系统命令。在 Linux 上有 xdg-open,这是 GNOME、KDE 和 XFCE 支持的 freedesktop.org 标准命令。
if sys.platform=='win32':
os.startfile(url)
elif sys.platform=='darwin':
subprocess.Popen(['open', url])
else:
try:
subprocess.Popen(['xdg-open', url])
except OSError:
print 'Please open a browser on: '+url
这将在主流平台上提供更好的用户体验。也许你可以在其他平台上回退到webbrowser。尽管如果您使用的是一个不起眼的/不寻常的/嵌入式操作系统,而上述任何一项都不起作用,但很可能webbrowser 也会失败。
【讨论】:
xdg-open,尽管xdg-open 无论如何都使用类似的嗅探)。例如,win32 实现已经使用了os.startfile(),并且它也有一个回退。
xdg-open。因此,这个答案在现代 python 上已经过时了,没有理由不使用 webbrowser 模块。
您可以使用webbrowser 模块。
webbrowser.open(url)
【讨论】:
那么@kobrien和@bobince的代码混合起来怎么样:
import subprocess
import webbrowser
import sys
url = 'http://test.com'
if sys.platform == 'darwin': # in case of OS X
subprocess.Popen(['open', url])
else:
webbrowser.open_new_tab(url)
【讨论】:
【讨论】: