繁体   English   中英

无法在网络浏览器中从python打开html文件-记事本改为打开

[英]Cannot open an html file from python in a web browser - notepad opens instead

在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扩展名,但事实并非如此。

这是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设置。

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

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

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

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

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

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

默认浏览器尝试使用通用命令来调用用户的默认Internet浏览器。 根据您的操作系统(可能还有您的默认浏览器),在打开文件时此方法可能起作用也可能不起作用。 例如,当我在MacOs上使用Chrome作为默认浏览器对其进行测试时,会出现一个(尚未打开)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)

当我使用MacO(Firefox和Chrome)和Ubuntu(仅Firefox)进行测试时,以上代码成功在网络浏览器中打开了本地.html文件。 我不能保证它可以在Windows或不同的浏览器上运行,但是似乎有可能(所有非默认的Windows浏览器似乎都是通过subprocess.Popen调用的,因此只要有可能,它们就应该可以运行从Windows命令行在浏览器中打开文件)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM