无法在Web浏览器中从python打开html文件 - 而是打开记事本

时间:2017-06-09 00:19:35

标签: python html python-webbrowser pygal

在python中,我试图使用pygal

绘制图形
import pygal  # First import pygal
bar_chart = pygal.Bar()
bar_chart.add('Fibonacci', [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55])
bar_chart.add('Padovan', [1, 1, 1, 2, 2, 3, 4, 5, 7, 9, 12])
bar_chart.render_in_browser()

不幸的是,它总是打开HTML文件,但不会打开浏览器窗口中的HTML页面。我看过很多帖子,我看到人们过去也有过类似的问题。我没有找到有效的解决方案。我还尝试通过webbrowser模块打开它,但也会在记事本中打开HTML文件。

url='file://C:/Users/User1/AppData/Local/Temp/tmpsblpwtpr.html'
webbrowser.open(url)

有人有什么想法吗?

3 个答案:

答案 0 :(得分:1)

尽管标有html扩展名,但它不是。

它的SVG XML。

这是文件的标题: <svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" id="chart-c252fdc0-451c-4482-b9ae-09f5b513a2fc" class="pygal-chart" viewBox="0 0 800 600"><!--Generated with pygal 2.3.1 (lxml) Ā©Kozea 2012-2016 on 2017-06-09--><!--http://pygal.org--><!--http://github.com/Kozea/pygal-->

为记事本配置了xml或svg设置。

答案 1 :(得分:1)

请参阅webbrowser模块文档中的以下内容:

  

请注意,在某些平台上,尝试使用此方法打开文件名   功能,可以工作并启动操作系统的关联   程序。

系统上的.html文件的相关程序很可能是记事本,而不是您的浏览器。

答案 2 :(得分:0)

Python documentation for webbrowser.open所述,此功能不是在浏览器中打开本地文件的可靠方法:

  

请注意,在某些平台上,尝试使用此函数打开文件名可能会起作用并启动操作系统的关联程序。但是,既不支持也不便携。

这里的问题是webbrowser.open(Python 2.7源代码)如何决定用于打开url /文件的程序。导入webbrowser时,它会存储与浏览器(_tryorder)对应的字符串列表。此列表中的第一项(以及使用的第一个浏览器)是特定于操作系统的默认浏览器,后跟模块已检测到的其他浏览器。

默认浏览器尝试使用将调用用户默认Internet浏览器的通用命令。根据您的操作系统(可能还有默认浏览器),这可能会或可能不会打开文件。例如,当我在使用Chrome作为默认浏览器的MacO上测试它时,出现了一个(已经打开的)Chrome窗口,但该文件未打开(也没有任何新选项卡)。但是,在Ubuntu中默认使用Firefox,该文件在浏览器中打开。

在Windows中,“默认浏览器”使用os.startfile()打开文件,Python documentation表示“就像在Windows资源管理器中双击文件一样”。正如pycoder's answer提到的那样,计算机上.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命令行在浏览器中打开文件。)