在Python 3中,我们可以使用以下代码轻松地在同一行打印内容。我用这个方法来了解我的循环进度(还有多少时间完成)。然而,在Jupyter中它不起作用(会打印在不同的行上)。
import time
for f in range(10):
print(f, end='\r', flush=True)
time.sleep(10)
关闭漂亮打印(%pprint)是行不通的,我也尝试使用sys.stdout.write()来关闭,但我仍然有这个问题。
在Python 3中,我们可以使用以下代码轻松地在同一行打印内容。我用这个方法来了解我的循环进度(还有多少时间完成)。然而,在Jupyter中它不起作用(会打印在不同的行上)。
import time
for f in range(10):
print(f, end='\r', flush=True)
time.sleep(10)
关闭漂亮打印(%pprint)是行不通的,我也尝试使用sys.stdout.write()来关闭,但我仍然有这个问题。
稍后我找到了解决方法(请注意,它在PyCharm Jupyter中无效,只适用于浏览器实现)。对我而言,print
很好用,但是这里建议使用 display
,但它会打印字符串周围的单引号。
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)
编辑:只想补充一下,TQDM通常也是实现此目标的好工具。它可以显示进度条,并允许您在其下方编写输出或更改每个进度条的描述。另请参见此帖子。
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)
还有一个颜色漂亮的笔记本电脑
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}")
在print函数前使用\r
前缀,并添加end=""
参数,如下所示:
print("\r这将被打印在同一行", end="")
这在Google Colab的Jupyter笔记本中有效。
如果你保留"\r",它将覆盖该行,否则你将附加到该行。你的版本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才能获得输出
for i in range(3):
print(i, "-", i ** 2, end="\r")
for i in range(3):
print(f"{i} - {i ** 2}", end="\r")
这里是我正在使用的软件包版本。
# Name Version
notebook 6.4.12
ipython 8.4.0
python 3.8.13
jupyter-client 7.3.4