我的主要问题是在尝试给相对路径添加 file://
时出现了错误的URL。可以通过以下方法修复:
webbrowser.open('file://' + os.path.realpath(filename))
webbrowser.open
方法会尝试多种方法,直到其中一种“成功”,这是一个宽松的定义。
WindowsDefault
类调用os.startfile()
失败并返回False
。我可以通过在Windows运行命令中输入URL并查看错误消息而验证该信息。
无论URL是否正确,GenericBrowser
和BackgroundBrowser
都将使用exe调用subprocess.Popen()
,并且成功时将返回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', [<class 'webbrowser.WindowsDefault'>, None]),
('c:\\program files\\internet explorer\\iexplore.exe', [None, <webbrowser.BackgroundBrowser object at 0x00000000022E3898>])]
>>>
修改环境变量后,这是我的设置:
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环境变量或修改路径都可以让我获得正确的浏览器和更好的错误提示信息。
谢谢大家的帮助,没有你们的想法我无法解决这个问题。
webbrowser.register
和BROWSER
环境变量,那将是很好的信息。文档没有详细介绍。 - Acorn'file://'
与相对路径的结合导致了问题。如果我去掉'file://'
或使用os.path.realpath(filename)
,它就能正常工作并启动Google。我仍然想知道为什么一个错误的文件URL会回退到一个空地址栏的IE。 - McLeopold