【问题标题】:Call to operating system to open url?调用操作系统打开网址?
【发布时间】:2026-02-16 15:05:02
【问题描述】:

我可以使用什么来调用操作系统以在用户默认使用的任何浏览器中打开 URL? 不担心跨操作系统兼容性;如果它在 linux 中运行,对我来说就足够了!

【问题讨论】:

  • 您在寻找什么操作系统,因为 Windows、MacOS 和 Linux 都有不同的调用约定。

标签: python linux url operating-system


【解决方案1】:

以下是使用给定 url 打开用户默认浏览器的方法:

import webbrowser

webbrowser.open(url[, new=0[, autoraise=True]])

这是有关此功能的文档。它是 Python 标准库的一部分:

http://docs.python.org/library/webbrowser.html

我已经在 Linux Ubuntu 10.10 上成功测试了这个。

【讨论】:

  • 在 OS X 10.8.2 和 Python 2.7.2 上,这 not 似乎工作。但是,它在带有 Python 2.7.3 的 Windows 7 上运行良好。在带有 XFCE 4.8 和 Python 2.7.3 的 Ubuntu 12.04 上也可以正常工作。
  • 好的,在带有 Python 2.7.4 的 OS X 10.8.2 上,这似乎确实有效。因此,令人讨厌的是,它可能只在较新版本的 Python 上可靠地工作。
  • 我得到 webbrowser.open(url[, new=0[, autoraise=True]]) ^ SyntaxError: invalid syntax
  • 我正在使用 OSX 10.8.4 和 Python 2.7.2 并验证它确实有效。但是,如果您使用 url 'google.com' 它会失败而不会出错。您需要指定“google.com”。
  • FWIW,这是import antigravity 使用的:hg.python.org/cpython/file/tip/Lib/antigravity.py
【解决方案2】:

就我个人而言,我真的不会使用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 也会失败。

【讨论】:

  • 我刚刚查看了 webbrowser 的源代码,但我不确定我是否同意你的看法。只有 unix 嗅探看起来有点不可靠,即使它应该在 KDE 或 GNOME 中正常工作(它可能可以使用补丁来使用xdg-open,尽管xdg-open 无论如何都使用类似的嗅探)。例如,win32 实现已经使用了os.startfile(),并且它也有一个回退。
  • 当我将 Safari 作为我的默认浏览器时,以及当我在 Mac 上将 Chrome 作为我的默认浏览器时,webbrowser 模块对我有用。
  • 请注意,webbrowser 现在也使用xdg-open。因此,这个答案在现代 python 上已经过时了,没有理由不使用 webbrowser 模块。
【解决方案3】:

您可以使用webbrowser 模块。

webbrowser.open(url)

【讨论】:

    【解决方案4】:

    那么@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)
    

    【讨论】:

      【解决方案5】:

      【讨论】:

        最近更新 更多