webbrowser.open()
вызывает браузер из командной строки. Таким образом, вы могли бы попытаться сделать это самостоятельно в первую очередь. Если это не сработает, скорее всего, ваш браузер просто не поддерживает это для локальных файлов или чего-то еще.
Например, в Ubuntu + Firefox webbrowser.open()
делает то, что вы просите. (но, как сказал Дейв Уэбб в своем ответе, вы должны предоставить file:
URL, а не просто имя файла).
(на данный момент не на Windows, поэтому не проверял там)
Что касается того, почему он не загружает Chrome, но ie9: (вы можете посмотреть в коде webbrowser.py самостоятельно, если хотите) Я думаю, что он действительно пытается использовать ваш браузер по умолчанию, выполнив os.startfile(url)
. Что происходит, когда вы дважды щелкаете файл help.html, или когда вы просто набираете help.html
(при необходимости измените путь) в командной строке? Он должен сделать то же самое.
РЕДАКТИРОВАТЬ:
Кажется, что он не всегда использует командную строку. В Windows при попытке использовать браузер по умолчанию он использует os.startfile()
, который, в свою очередь, использует api win32 ShellExecute
. ShellExecute
может использоваться для выполнения определенных действий с файлом, папкой или URL-адресом, таких как «открыть», «изменить» или «распечатать» в приложении по умолчанию. В этом случае ShellExecute
просят «открыть» URL.
Однако, похоже, что ShellExecute
игнорирует идентификатор фрагмента (часть после #
) при открытии file:
URL. Как ни странно, это не так с http:
URL. Предположительно, file:
url сначала преобразуется в простое имя файла.
Кажется, вы мало что можете с этим поделать, кроме:
- напишите что-нибудь, что "делает правильно" самостоятельно (и зарегистрируйте это как контроллер браузера для модуля
webbrowser
, и используйте webbrowser.get()
, чтобы получить свой контроллер, см. docs )
- как делают многие приложения: настройте браузер, который вы хотите использовать (или сделайте так, чтобы ваши пользователи могли это сделать). Самый простой способ - установить переменную окружения
BROWSER
(см. документация модуля веб-браузера )
- подайте файл через http-сервер localhost и откройте http-URL, который затем будет выглядеть примерно так: «http: //.» http://localhost:8000/help.html#2.1.0". (модуль SimpleHttpServer может пригодиться)
Или, самый простой способ: как вы, кажется, на Windows: просто попробуйте открыть Internet Explorer специально:
try:
browser = webbrowser.get('c:\\Program Files\\Internet Explorer\\IEXPLORE.EXE')
except Webbrowser.Error:
browser = webbrowser.get()
browser.open(url)
(Это вернется к использованию по умолчанию, поэтому ваш код будет работать на других платформах)