【发布时间】:2011-08-20 10:49:45
【问题描述】:
我正在尝试在默认浏览器中从 python 启动一个本地 html 文件(现在我的默认设置是 Google Chrome,如果我双击一个 .html 文件,Chrome 就会启动。)
当我使用 python 的webbrowser.open() 时,IE 会启动,但地址栏为空白。
Python 2.7.1 (r271:86832, Nov 27 2010, 17:19:03) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import webbrowser
>>> filename = 'test.html'
>>> webbrowser.open('file://'+filename)
True
>>> print(webbrowser.get().__class__.__name__)
WindowsDefault
我检查了我的默认程序,它们看起来是正确的。我在 Win 7 SP1 上。为什么 Chrome 没有启动?
更新:代码将在未知的操作系统和机器上运行,因此硬编码或注册浏览器或路径更新不是选项。我在想,解析file:// 的网址,然后进行os.path.exists 检查和os.path.realpath 可能是答案。
【问题讨论】:
-
Shadikka 查看源代码,我引用了文档,Acorn 在代码中给出了实用的建议。总之,它们是一个非常完整的答案。
-
虽然如果有人知道如何使用
webbrowser.register和BROWSER环境变量,那么这将是一个很好的信息。文档没有详细说明。 -
看起来
'file://'与相对路径的结合导致了问题。如果我放弃'file://'或使用os.path.realpath(filename)它可以工作,谷歌就会启动。我仍然想知道为什么一个错误的文件 url 会回退到带有空白地址栏的 IE。 -
McLeopold:因为 Windows 会根据每个扩展决定打开哪个浏览器(我忘记了它对目录的默认行为,更不用说空路径或无效路径了)。您可以将 Chrome 作为 Windows 默认浏览器,但仍将 IE 作为与 .MP3、.GIF 扩展等相关联的应用程序(或者实际上是 RealPlayer 或任何其他二进制文件)。请在您的问题中编辑这些详细信息。您是否只想保证 Windows 会针对特定类型的扩展程序打开 Chrome?
标签: python windows browser default python-webbrowser