python的webbrowser在Windows相对路径上启动IE,而不是默认浏览器 [英] python's webbrowser launches IE, instead of default browser, on Windows relative path

查看:159
本文介绍了python的webbrowser在Windows相对路径上启动IE,而不是默认浏览器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在默认浏览器中从python启动本地html文件(现在,如果我双击.html文件,我的默认浏览器是Google Chrome浏览器.)

I'm attempting to launch a local html file from python in the default browser (right now my default is Google Chrome if I double-click on a .html file, Chrome launches.)

当我使用python的 webbrowser.open()时,IE会启动,并显示一个空白地址栏.

When I use python's webbrowser.open(), IE launches instead, with a blank address bar.

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无法启动?

I've checked my default programs and they look correct. I'm on Win 7 SP1. Why is Chrome not launching?

更新:该代码将在未知的操作系统和机器上运行,因此硬编码或注册浏览器或路径更新不是可选项.我在想解析 file://的url,然后进行 os.path.exists 检查和 os.path.realpath 可能就是答案.

Update: The code will be running on unknown OS's and machines, so hardcoding or registering browsers or path updates are not options. I'm thinking that parsing the url for file:// and then doing an os.path.exists check and os.path.realpath might be the answer.

推荐答案

我的主要问题是尝试将 file://附加到相对路径之前,URL错误.可以通过以下方法解决:

My main issue was a bad URL by attempting prepend file:// to a relative path. It can be fixed with this:

webbrowser.open('file://' + os.path.realpath(filename))

使用 webbrowser.open 将尝试多种方法,直到一个成功"为止,这是一个松散的定义.

Using webbrowser.open will try multiple methods until one "succeeds", which is a loose definition.

WindowsDefault 类调用 os.startfile()失败,并返回 False .我可以通过在Windows run命令中输入URL并看到错误消息而不是浏览器来验证这一点.

The WindowsDefault class calls os.startfile() which fails and returns False. I can verify that by entering the URL in the windows run command and seeing an error message rather than a browser.

GenericBrowser BackgroundBrowser 都将使用一个exe调用 subprocess.Popen(),即使该URL错误,该exe也会成功执行并返回 True .IE并未提供该问题的迹象,所有其他浏览器均显示一条不错的消息,提示它们找不到该文件.

Both GenericBrowser and BackgroundBrowser will call subprocess.Popen() with an exe which will succeed, even with a bad URL, and return True. IE gives no indication of the issue, all other browsers have a nice messages saying they can't find the file.

  1. GenericBrowser 由环境变量 BROWSER 设置,并且是第一个.
  2. WindowsDefault 是第二名.
  3. BackgroundBrowser 是最后一个,如果没有其他作用,则包括回退IE.
  1. GenericBrowser is set by the environment variable BROWSER and is first.
  2. WindowsDefault is second.
  3. BackgroundBrowser is last and includes the fall back IE if nothing else works.

这是我的原始设置:

>>> import webbrowser
>>> webbrowser._tryorder
['windows-default',
 'C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE']
>>> webbrowser._browsers.items()
[('windows-default', [<class 'webbrowser.WindowsDefault'>, None]),
 ('c:\\program files\\internet explorer\\iexplore.exe', [None, <webbrowser.BackgroundBrowser object at 0x00000000022E3898>])]
>>>

这是修改环境变量后的设置:

Here is my setup after modifiying the environment variables:

C:>path=C:\Program Files (x86)\Mozilla Firefox;%path%

C:>set BROWSER=C:\Users\Scott\AppData\Local\Google\Chrome\Application\chrome.exe

C:>python
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
>>> webbrowser._tryorder
['C:\\Users\\Scott\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe',
 'windows-default',
 'firefox',
 'C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE']
>>> webbrowser._browsers.items()
[('windows-default', [<class 'webbrowser.WindowsDefault'>, None]),
 ('c:\\program files\\internet explorer\\iexplore.exe',[None, <webbrowser.BackgroundBrowser object at 0x000000000235E828>]),
 ('firefox', [None, <webbrowser.BackgroundBrowser object at 0x000000000235E780>]),
 ('c:\\users\\scott\\appdata\\local\\google\\chrome\\application\\chrome.exe', [None, <webbrowser.GenericBrowser object at 0x000000000235E8D0>])]
>>>

webbrowser._tryorder 给出了尝试使用的浏览器列表.注册chrome或添加BROWSER env var或修改我的路径,都会使我获得正确的浏览器,并获得更好的错误消息.

The webbrowser._tryorder gives the list of browsers tried. Registering chrome or adding a BROWSER env var or modifiying my path all would have gotten me the correct browser with a better error message.

感谢帮助人员,没有您的想法我无法解决.

Thanks for the help guys, I couldn't have solved this without your ideas.

这篇关于python的webbrowser在Windows相对路径上启动IE,而不是默认浏览器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆