我正在尝试在默认浏览器中从 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://
的 url,然后执行 os.path.exists
检查和 os.path.realpath
可能就是答案。
原文由 McLeopold 发布,翻译遵循 CC BY-SA 4.0 许可协议
我的主要问题是尝试将
file://
添加到相对路径之前的错误 URL。它可以用这个修复:使用
webbrowser.open
将尝试多种方法,直到一个“成功”,这是一个松散的定义。WindowsDefault
类调用os.startfile()
失败并返回False
。我可以通过在 Windows 运行命令中输入 URL 并看到一条错误消息而不是浏览器来验证这一点。Both
GenericBrowser
andBackgroundBrowser
will callsubprocess.Popen()
with an exe which will succeed, even with a bad URL, and returnTrue
. IE 没有给出问题的指示,所有其他浏览器都有一个很好的消息,说他们找不到该文件。GenericBrowser
由环境变量BROWSER
设置,并且是第一个。WindowsDefault
第二个。BackgroundBrowser
是最后一个,如果没有其他效果,则包括回退 IE。这是我的原始设置:
这是修改环境变量后的设置:
webbrowser._tryorder
给出了尝试过的浏览器列表。注册 chrome 或添加 BROWSER env var 或修改我的路径都会让我获得正确的浏览器和更好的错误消息。感谢您的帮助,没有您的想法我无法解决这个问题。