【问题标题】:Cannot open an html file from python in a web browser - notepad opens instead无法在 Web 浏览器中从 python 打开 html 文件 - 而是打开记事本
【发布时间】:2017-06-09 00:19:35
【问题描述】:

在 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)

大家有什么想法吗?

【问题讨论】:

  • 如果您在文件资源管理器中双击 .html 文件,它会在浏览器中打开吗?
  • 可能您的系统文件关联配置错误,无法将.html 文件与记事本关联?
  • 是的,这就是我的意思。请参阅下面的答案。

标签: python html python-webbrowser pygal


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    尽管标有 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 设置是为记事本配置的。

    【讨论】:

      【解决方案3】:

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

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

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

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

      在 Windows 中,“默认浏览器”使用 os.startfile() 打开文件,Python documentation 表示“就像在 Windows 资源管理器中双击文件一样”。正如pycoder's answer 所提到的,您计算机上.html 文件的关联程序很可能是记事本。如果是这种情况,将用于打开 .html 文件的默认程序更改为您的 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 命令行在浏览器中打开文件)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-15
        • 2016-12-14
        • 2014-06-29
        • 2013-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-18
        相关资源
        最近更新 更多