2010-11-18 42 views
50

我可以使用什么来调用操作系统在用户默认的浏览器中打开URL? 不担心跨OS兼容性;如果它在linux下工作对我来说足够了!打电话给操作系统打开url?

+0

你在找自从Windows,MacOS和Linux的都有不同的调用约定什么操作系统。 – koblas 2010-11-18 16:18:20

回答

73

这里是如何与给定的URL打开用户的默认浏览器:

import webbrowser 

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

下面是有关此功能的文档。这是Python的stdlib之间的一部分:

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

我已经成功地测试了这个在Linux,Ubuntu的10.10。

+2

FWIW它也适用于Windows。 – martineau 2010-11-18 21:17:50

+1

我在Ubuntu 12.04上测试它,它也可以正常工作, – 2013-01-11 18:57:30

+3

它适用于Mac。 – daviewales 2013-02-04 15:28:42

3

您可以使用webbrowser模块。

webbrowser.open(url) 
26

我个人真的不会使用webbrowser模块。

这是一个复杂的嗅探特定的浏览器,如果他们有多个安装程序将不会找到用户的默认浏览器,并且如果它不知道它的名称将不会找到浏览器(如Chrome)。

在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也可能会失败。

+4

我刚刚查看了webbrowser的源代码,我不确定我是否同意你的看法。只有unix嗅探看起来有点不可靠,甚至它应该能够在KDE或GNOME中正常工作(它可能使用补丁来使用'xdg-open',尽管'xdg-open'使用类似的嗅探)。例如,win32实现已经使用'os.startfile()',并且它也有一个后备。 – 2010-11-18 23:52:48

+0

当我将Safari作为默认浏览器时,以及在Mac上将Chrome作为默认浏览器时,webbrowser模块为我工作。 – daviewales 2013-02-04 15:31:29

+0

请注意,webbrowser现在也使用'xdg-open'。因此,这个答案在现代python上已经过时了,没有理由不使用webbrowser模块。 – Chronial 2017-09-19 14:25:06

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)