在IPython控制台中打印在同一位置

4

这个问题之前已经有人问过了(例如ab等),但我无法在IPython控制台中使其正常工作。 我只是想重复地在同一行打印一些文本,不是作为连续的文本,而是替换之前的文本。 这是我的代码:

import time

try:
    while True:
        s = "I want this always on the same line. "        
        print(s, end="\r", flush=True)        
        time.sleep(0.5)

except KeyboardInterrupt:
    pass

以下是我在IPython控制台中得到的结果:

Text does not print on the same line

我在PC上使用Anaconda发行版和Spyder,Python 3。代码在Anaconda终端中可以运行,但我需要打印出一些图片,所以我需要使用IPython。我也尝试过使用end=""或在print()语句后添加逗号(即使这是针对Python 2的),但都没有成功。


1
print("hello", end="\r") 在我的控制台(终端)上运行良好。 - ZdaR
我得到了“hellohellohellohellohellohellohellohellohellohellohello”... - Zep
尝试在终端中运行它,python3 run.py @Zep - ZdaR
啊!回车在终端确实有效!但是我需要使用IPython,因为我想输出一些图像...我会编辑问题。 - Zep
1个回答

4

在编辑IPython控制台之前,我写了这篇文章,因此我不确定这是否是一个适用于那里的解决方案,但这是我的解决方案:

不要使用print()命令,而应该尝试使用sys.stdout。

这是我脚本中的“进度报告”:

from sys import stdout
from time import sleep

jobLen = 100
progressReport = 0

while progressReport < jobLen:
    progressReport += 1
    stdout.write("\r[%s/%s]" % (progressReport, jobLen))
    stdout.flush()
    sleep(0.1)

stdout.write("\n")
stdout.flush()

睡眠函数只是为了让你看到进度报告变大。stdout中的"\r"部分是使脚本“替换”以前的字符串的原因。在write()函数之后添加flush(),因为在某些环境中需要显示输出。

一旦您不再想写入该行,则通过编写没有“\r”的空字符串或编写“\n”来终止它。


它可以工作!我的意思是……它在我示例中运行良好,但在我正在处理的实际代码中无法正常工作。我会尝试解决剩下的问题。 - Zep
据我所知,在IPython中不起作用。或者也许它可以在终端IPython控制台中使用,我猜我是通过Jupyter笔记本使用它... - Ben Farmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接