webbrowser.open () разрывает ссылку (python 3.7) - PullRequest
0 голосов
/ 01 июля 2018

Когда я бегу

import webbrowser
webbrowser.open('https://google.com')

в Python 3.7 он открывает неработающий URL в моем браузере по умолчанию: http://openurl%28https//google.com,new-window). Когда я запускаю тот же код в 3.6, он работает как надо. Это ошибка в Python 3.7 или у меня что-то неправильно настроено?

Я использую:

  • Linux Manjaro
  • Python 3.7.0, установленный с pyenv (env PYTHON_CONFIGURE_OPTS="--enable-shared --enable-optimizations" pyenv install 3.7.0)
  • Opera - мой браузер по умолчанию
  • webbrowser.get() возвращает <webbrowser.Opera object at 0x7f546c22ea90>
  • my os.environ dump

1 Ответ

0 голосов
/ 02 июля 2018

Редактировать : Эта проблема исправлена ​​в Python. Вам не нужно рассматривать эту проблему после следующей небольшой версии Python. Следующий ответ все еще полезен для анализа.


В Python3.6 webbrowser.get() даст вам что-то вроде:

<webbrowser.BackgroundBrowser object at 0x7f1e5373a048>

Но в Python3.7:

<webbrowser.Opera object at 0x7f546c22ea90>.

Это означает, что в Python3.6 он попытается открыть URL, используя стандарт XDG:

xdg-open https://google.com

тогда как в Python3.7 он будет открывать браузер Opera напрямую, используя свою команду CLI :

opera -remote "openURL(https://google.com,new-window)"

Хотя я не уверен, предназначено ли это изменение, оба пути должны быть правильными. Проблема в том, что Опция командной строки Opera не работает . Это не ошибка Python, это ошибка Opera. (Попробуйте открыть с помощью команды выше, вы увидите тот же http://openurl%28https//google.com,new-window).)

В качестве обходного пути вы можете принудительно открыть URL-адрес через стандарт XDG, используя register() с новым аргументом preferred, введенным в 3.7 .

import webbrowser
webbrowser.register("xdg-open", None, webbrowser.BackgroundBrowser("xdg-open"), preferred=True)
print(webbrowser.get())  # Now you will see <webbrowser.BackgroundBrowser object at 0x7f1e5373a048>
webbrowser.open('https://google.com')

Надеюсь, это поможет!

Редактировать: похоже, что ошибка Opera в том, что они не обновили документацию после того, как они изменили движок на Chromium. Opera прекрасно работает с аргументами Chrom's CLI. Я выпустил изменение в Python , чтобы отразить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...