如何暂停Jupyter Notebook脚本直到按钮按下后继续运行
问题场景
在Jupyter Notebook中调用notebook_login组件完成Hugging Face账号登录,基础调用代码如下:
notebook_login()
组件运行效果如下:
核心问题
- 登录组件放在Notebook执行流程的中间段,点击「全部运行(Run All)」时,还没完成输入Token、点击登录按钮的操作,后续单元格就已经开始执行,会因为缺少鉴权信息报错。
- 现有公开的Jupyter暂停等待用户输入的方案,都是针对自定义开发的按钮组件实现的,没有通用适配逻辑,无法直接套用在官方提供的
notebook_login组件上。
可直接复用的解决方法
方法1:兼容所有版本的通用阻塞方案
不需要修改官方组件的内部逻辑,在登录组件后加一段状态校验的阻塞逻辑即可,直接替换原来的notebook_login()调用:
import time from huggingface_hub import notebook_login, HfApi from IPython.display import clear_output # 渲染登录控件 notebook_login() # 循环校验登录状态,直到登录成功再放行 while True: try: # 校验本地是否已经存在有效登录凭据 HfApi().whoami() clear_output(wait=True) print("Hugging Face登录验证通过,继续执行后续流程") break except Exception: # 未登录成功则间隔1秒再次校验 time.sleep(1)
这个方案的适配性很强:
- 不侵入官方组件代码,不会因为组件版本迭代出现兼容问题
- 1秒的轮询间隔几乎不占用系统资源,登录完成后会立刻继续执行,没有明显延迟
- 点「全部运行」时单元格会一直停在登录校验环节,直到完成登录操作才会往下跑,不会出现后续代码提前执行的问题
方法2:新版库原生阻塞方案
如果使用的huggingface_hub版本在0.14及以上,直接调用新版登录组件即可,组件本身已经内置了等待用户操作完成的阻塞逻辑,不需要额外写代码:
notebook_login(new_gui=True)
注意:旧版本库没有
new_gui参数,用这个方法会报错,优先用方法1的通用方案即可。
内容的提问来源于stack exchange,提问作者Penguin
相关产品推荐
相关产品推荐

