调用操作系统以打开URL?


75

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


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

Answers:


120

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

import webbrowser

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

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

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

我已经在Linux Ubuntu 10.10上成功测试了此功能。


2
在OS X 10.8.2与Python 2.7.2这并不会出现工作。但是,它在带有Python 2.7.3的Windows 7上运行良好。在带有XFCE 4.8和Python 2.7.3的Ubuntu 12.04上也可以正常工作。
leetNightshade

好的,在带有Python 2.7.4的OS X 10.8.2上,这确实可以正常工作。因此,令人讨厌的是,它可能只能可靠地在更新版本的Python上运行。
leetNightshade

2
我得到webbrowser.open(url [,new = 0 [,autoraise = True]])^ SyntaxError:语法无效
fatuhoku

我正在将OSX 10.8.4与Python 2.7.2结合使用,并验证了它确实可以正常工作。但是,如果您使用网址“ google.com”,则它将失败而不会出现错误。您需要指定“ google.com ”。
2013年

1
FWIW,import antigravity使用的是:hg.python.org/cpython/file/tip/Lib/antigravity.py
Sumit

39

就我个人而言,我真的不会使用webbrowser模块。

对于特定的浏览器来说,这是一个复杂的嗅探,如果安装了多个浏览器,则将找不到用户的默认浏览器;如果不知道其名称,则将找不到该浏览器(例如,Chrome)。

在Windows上,更好的方法是仅使用该os.startfile功能,该功能也可用于URL。在OS X上,可以使用opensystem命令。在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失败的也会很大。


6
我刚刚查看了网络浏览器的来源,但不确定是否同意。只有unix嗅探看起来有点不可靠,甚至它也应该可以在KDE或GNOME中正常工作(尽管可能xdg-openxdg-open使用类似的嗅探,但它可能可以使用补丁来使用)。例如,win32实现os.startfile()已经使用过,并且还具有备用功能。
Liquid_Fire

1
当我将Safari作为默认浏览器时,以及在Mac上将Chrome作为默认浏览器时,webbrowser模块都对我有用。
daviewales

7
注意,webbrowserxdg-open现在也使用。因此,这个答案在现代python上已经过时了,没有理由不使用webbrowser模块。
慢性

7

然后如何混合@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)


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.