如webbrowser.open 的 Python 文档中所述,此函数不是在浏览器中打开本地文件的可靠方法:
请注意,在某些平台上,尝试使用此函数打开文件名可能会起作用并启动操作系统的关联程序。但是,这既不支持也不可移植。
这里的问题是webbrowser.open(Python 2.7 源代码)如何决定使用哪个程序来打开 url/文件。导入时webbrowser
,它存储与浏览器对应的字符串列表(_tryorder
)。此列表中的第一项(也是使用的第一个浏览器)是特定于操作系统的默认浏览器,然后是模块检测到的其他浏览器。
默认浏览器尝试使用将调用用户默认 Internet 浏览器的通用命令。根据您的操作系统(可能还有您的默认浏览器),这可能会或可能不会在打开文件时起作用。例如,当我在 MacOs 上使用 Chrome 作为默认浏览器进行测试时,出现了一个(n 已打开)Chrome 窗口,但该文件没有打开(也没有打开任何新选项卡)。但是,在默认使用 Firefox 的 Ubuntu 中,该文件是在浏览器中打开的。
在 Windows 中,“默认浏览器”使用 打开文件os.startfile()
,Python 文档中说“就像在 Windows 资源管理器中双击文件一样”。正如pycoder 的回答所提到的,您计算机上 .html 文件的关联程序很可能是记事本。如果是这种情况,将用于打开 .html 文件的默认程序更改为您的 Web 浏览器应该可以解决此问题。
但是,可以在 Web 浏览器中打开文件,而无需更改任何设置。您可以尝试通过列出的其他浏览器之一打开它webbrowser._tryorder
(尽管应该注意源代码(在 2.7 和 3.6 中)似乎不支持 Windows 上的 Chrome)。它应该看起来像这样(尽管使用不同的浏览器名称):
>>> webbrowser._tryorder
['MacOSX', 'chrome', 'firefox', 'safari']
获得此列表后,您可以选择要使用的浏览器(在本例中为 Firefox),然后使用以下代码(_tryorder
根据需要替换索引):
browser = webbrowser.get(webbrowser._tryorder[2])
browser.open(url)
当我使用 MacOs(Firefox 和 Chrome)和 Ubuntu(仅 Firefox)测试时,上面的代码成功地在 Web 浏览器中打开了一个本地 .html 文件。我不能保证它可以在 Windows 或不同的浏览器上运行,但它似乎有可能(所有非默认的 Windows 浏览器似乎都是通过 调用的subprocess.Popen
,所以只要可以打开从 Windows 命令行在浏览器中创建文件)。