从IPython Notebook/Jupyter单元格中打开新选项卡中的URL

26

有没有一种方法可以在IPython笔记本单元格中使程序生成的URL在一个新的浏览器标签页或窗口中打开?

执行笔记本单元格后,应该打开一个指向生成链接的新标签页或窗口。

注意:当我只返回一个带有超链接的IPython.core.display.HTML实例时,链接是无效的。如果将url复制并粘贴到浏览器窗口中,它是有效的。

3个回答

31

当您使用标准浏览器时,可以使用webbrowser模块:

import webbrowser

# generate an URL
url = 'https://' + 'www.google.com'
webbrowser.open(url)

3
我不认为这会起作用,因为Python代码正在Web服务器上运行,而你只是用网页浏览器进行可视化和编辑。 - guilhermecgs
1
你试过了吗?它能正常工作。只需将代码复制粘贴到你的笔记本中,看看会发生什么。 - Mike Müller
1
实际上我已经尝试了,但是没有成功。也许是我的操作有误,但是我得到了一个错误的布尔值返回。 - guilhermecgs
1
它在我的Mac和Chrome上运行良好。也许您没有定义默认的网络浏览器。尝试将环境变量BROWSER设置为您的浏览器。 - Mike Müller
2
好的。我的答案是针对“正常”使用情况的。在本地运行Notebook服务器。没有远程服务器,也没有Docker。 - Mike Müller
显示剩余6条评论

7

你可以使用JavaScript在客户端打开链接。它可以在远程服务器上工作,因为标签的打开发生在用户的浏览器中而不是在服务器上。

这个简单的代码片段使用window.open()来打开一个新的标签页或窗口,并访问您想要的URL。

from IPython.display import Javascript

def window_open(url):
    display(Javascript('window.open("{url}");'.format(url=url)))

我得到了 TypeError: 'module' 对象不可调用 - Cybernetic
嗯...我已经有一段时间没有看过这个了,但我记得找到这个问题及其回答很有帮助。 - Michael Noguera

1

基于Michael的https://dev59.com/KFsW5IYBdhLWcg3w7KxL#61900572答案,我提供了一种修复模块不可调用错误的变体:

import IPython

def window_open(url):
    IPython.display.display(IPython.display.Javascript('window.open("{url}");'.format(url=url)))

请分享为什么它有效。 - Kfcaio
"模块不可调用错误"的原因是在Cybernetic的代码中导入了IPython.display(一个模块),但Michael的代码假定已经导入了IPython.display.display。我的版本通过导入IPython并指定完全限定名称来明确调用函数。 - Conor McM
我冒昧进行了比平常更多的编辑,以帮助您避免误用答案作为评论的印象。请注意,您不应该这样做,我通常会标记为“不是答案”。然而,您的帖子似乎是对现有答案的适当变体/扩展/改进,这在我看来是可以接受的答案帖子。请检查以确保我没有歪曲您的意图。但是,如果您确信自己所写的是评论,请不要使用答案。祝玩得愉快。 - Yunnosch
请考虑将您在评论中写的内容编辑并移动到答案中。如果包含在答案中,它似乎是一个可以改善答案的解释。 - Yunnosch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接