Printing on the same line on a jupyter notebook

前端 未结 3 1880
-上瘾入骨i
-上瘾入骨i 2020-12-05 18:19

In python 3, we can easily print on the same line using the following script. I use this to understand the progress of my loop (how much time will be left). However, in jupy

相关标签:
3条回答
  • 2020-12-05 19:14

    The part "\r" overwrites the line, if you leave that you append to the line. Your version print(f, end='', flush=False) could work but I've read under Python 3 you need to use sys.stdout.write() and best is if you add flush command too.

    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)
    

    The stdout.flush is required on some systems or you won't get any output

    0 讨论(0)
  • 2020-12-05 19:18

    Found the solution to this a bit later (note that it does not work in pycharm jupyter, but only in the browser implementation). For me print works fine, but here display is advised, but it prints apostrophes around strings.

    from time import sleep
    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
        sleep(10)
    

    Edit: Just wanted to add that TQDM is often also a good tool for this goal. It displays progress bars and allows you to write output below it or differ the description of each bar. See also this post.

    import sys
    from tqdm import tqdm
    from time import sleep
    
    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)
    

    And the notebook one with nice colours

    from tqdm import tqdm, tqdm_notebook
    from time import sleep
    
    for i in tqdm_notebook(range(2), desc='1st loop'):
        sleep(0.01)
        tqdm.write(f"Done task {i}")
    
    0 讨论(0)
  • 2020-12-05 19:18

    Prefix a \r and add an argument end="" to print, like so

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

    This works in the Jupyter notebook in Google Colab.

    0 讨论(0)
提交回复
热议问题