如何在Jupyter Notebook的for循环每次迭代后清空单元格全部输出
问题原因
你遇到的输入行不显示问题是Jupyter Notebook的输出缓冲区机制导致的:clear_output(wait=True)会等待新的标准输出内容生成后再替换旧内容,但input()属于标准输入交互,不会触发输出缓冲区刷新,内核会误认为还没有新内容需要渲染,因此输入提示行被隐藏。
修复后的完整代码
import os import cv2 import sys import matplotlib.pyplot as plt from IPython.display import clear_output # 此处保留你原本的变量初始化逻辑:folder、starting_image_id、image_ids、ages、attractive_labels等 for filename in os.listdir(folder): clear_output(wait=True) split_filename=os.path.splitext(filename)[0] # 拆分文件名和后缀 image_id, age=split_filename.split('_', 2) # 提取image_id和年龄 if int(image_id)>= starting_image_id: # 从指定的图片id开始处理 image_ids.append(image_id) ages.append(age) # 灰度图展示逻辑 image = cv2.imread(os.path.join(folder,filename)) image1 = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) plt.figure() plt.imshow(image1, cmap='gray') plt.axis('off') # 可选:关闭坐标轴提升展示效果 plt.show() plt.close() # 关闭当前画布释放内存,避免内核负担过重 # 强制刷新输出缓冲区,确保图片完全渲染后再触发输入 sys.stdout.flush() attractive_rating='' # 初始化输入变量 while attractive_rating not in ['y','n']: attractive_rating=input('Do you find this face attractive? Enter y/n:') attractive_labels.append(attractive_rating) if attractive_labels.count('y') > 2 and attractive_labels.count('n')>2: break
补充说明
如果修改后还是有偶发的输入行不显示,可以把clear_output(wait=True)的wait参数改成False,仅切换时会有轻微闪烁,兼容性更好。
内容的提问来源于stack exchange,提问作者srv_77
相关产品推荐
相关产品推荐

