我跑步时
import webbrowser
webbrowser.open('https://google.com')
在Python 3.7中,它将在我的默认浏览器http://openurl%28https//google.com,new-window)
中打开损坏的URL。当我在3.6中运行相同的代码时,它应能正常工作。是Python 3.7的错误还是配置错误?
我正在使用:
env PYTHON_CONFIGURE_OPTS="--enable-shared --enable-optimizations" pyenv install 3.7.0
)安装的Python 3.7.0 webbrowser.get()
返回<webbrowser.Opera object at 0x7f546c22ea90>
答案 0 :(得分:3)
编辑:This issue在Python端已修复。在下一个较小的Python版本之后,您无需考虑此问题。以下答案仍然是有用的分析。
在Python3.6中,webbrowser.get()
将为您提供类似的信息:
<webbrowser.BackgroundBrowser object at 0x7f1e5373a048>
但是在Python3.7中:
<webbrowser.Opera object at 0x7f546c22ea90>
。
这意味着在Python3.6中,它将尝试使用XDG标准打开URL:
xdg-open https://google.com
而在Python3.7中,它将直接使用its CLI command打开Opera浏览器:
opera -remote "openURL(https://google.com,new-window)"
虽然我不确定是否打算进行此更改,但是两种方法都应该是正确的。问题是 Opera的命令行选项已损坏。这不是Python的错误,而是Opera的错误。 (尝试使用上面的命令打开,您将看到相同的http://openurl%28https//google.com,new-window)
。)
要解决此问题,您可以使用register()
with the new preferred
argument introduced in 3.7通过XDG标准强制打开URL。
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的CLI参数配合正常。我issued a change to Python对此进行了反映。