我的主要问题是通过尝试将文件://添加到相对路径中是不正确的URL。可以用这个来修复:
webbrowser.open('file://' + os.path.realpath(filename))
使用webbrowser.open会尝试多个方法,直到一个“成功”,这是一个松散的定义。
WindowsDefault类调用失败的os.startfile()并返回False。我可以通过在Windows运行命令中输入URL并查看错误消息而不是浏览器来验证。
GenericBrowser和BackgroundBrowser都会使用一个exe来调用subprocess.Popen(),即使使用了不良的URL也会成功,并返回True。 IE不提供任何问题的指示,所有其他浏览器都有一个很好的消息,表示他们找不到该文件。
> GenericBrowser由环境变量BROWSER设置,是第一个。
> WindowsDefault是第二。
> BackgroundBrowser是最后一个,如果没有其他工作,包括回退IE。
这是我的原始设置:
>>> import webbrowser
>>> webbrowser._tryorder
['windows-default',
'C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE']
>>> webbrowser._browsers.items()
[('windows-default', [, None]),
('c:\\program files\\internet explorer\\iexplore.exe', [None, ])]
>>>
这是修改环境变量后的设置:
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', [, None]),
('c:\\program files\\internet explorer\\iexplore.exe',[None, ]),
('firefox', [None, ]),
('c:\\users\\scott\\appdata\\local\\google\\chrome\\application\\chrome.exe', [None, ])]
>>>
webbrowser._tryorder给出了尝试浏览器的列表。注册chrome或添加BROWSER env var或修改我的路径全部会得到我正确的浏览器与更好的错误信息。
谢谢你们的帮助,没有你的想法,我无法解决这个问题。