在jupyter笔记本上同一行打印

时间:2017-03-17 11:10:32

标签: python jupyter-notebook

在python 3中,我们可以使用以下脚本轻松地在同一行上打印。我用这个来理解我的循环的进度(剩下多少时间)。但是,在jupyter中它不起作用(它在不同的行上打印)

import time
for f in range(10):
    print(f, end='\r', flush=True)
    time.sleep(10)

它不能打开%pprint的漂亮打印,我尝试使用sys.stdout.write(),但我也有这个问题。

3 个答案:

答案 0 :(得分:19)

稍后找到解决方案(注意它在pycharm jupyter中不起作用,但仅在浏览器实现中)。对我来说,SquareImageView工作正常,但建议使用here print,但它会在字符串周围打印撇号。

display

编辑:只是想补充一点,TQDM通常也是实现这一目标的好工具。它显示进度条,允许您在其下面写输出或不同的每个条的描述。另请参阅this post

from IPython.display import clear_output, display

for f in range(10):
    clear_output(wait=True)
    print(f)  # use display(f) if you encounter performance issues
    time.sleep(10)

笔记本电脑的颜色很好

import tqdm
values = range(3)
with tqdm(total=len(values), file=sys.stdout) as pbar:
    for i in values:
        pbar.set_description('processed: %d' % (1 + i))
        pbar.update(1)
        sleep(1)

答案 1 :(得分:9)

“\ r \ n”部分会覆盖该行,如果您将该行附加到该行。您的版本print(f, end='', flush=False)可以正常工作,但是我已经在Python 3下阅读了您需要使用sys.stdout.write(),最好是添加flush命令。

import sys
import time

for f in range(10):
    #delete "\r" to append instead of overwrite
    sys.stdout.write("\r" + str(f))
    sys.stdout.flush()
    time.sleep(10)

某些系统上需要stdout.flush,否则您将无法获得任何输出

答案 2 :(得分:5)

\r为前缀,并添加一个自变量end=""以进行打印,

print("\rThis will be printed on the same line", end="")

这在Google Colab的Jupyter笔记本中有效。