Моей основной проблемой был неправильный URL, пытаясь добавить file://
к относительному пути. Это можно исправить с помощью:
webbrowser.open('file://' + os.path.realpath(filename))
Использование webbrowser.open
будет пытаться использовать несколько методов до тех пор, пока один из них не будет "успешным", что является слабым определением.
Класс WindowsDefault
вызывает os.startfile()
, который завершается ошибкой и возвращает False
. Я могу убедиться в этом, введя URL-адрес в команду запуска Windows и увидев сообщение об ошибке, а не браузер.
И GenericBrowser
, и BackgroundBrowser
будут вызывать subprocess.Popen()
с exe-файлом, который преуспеет, даже с неверным 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', [<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 env var или изменение моего пути - все это позволило бы мне получить правильный браузер с лучшим сообщением об ошибке.
Спасибо за помощь, ребята, я бы не смог решить это без ваших идей.