PyCharm的print end='\r'语句无效

25

关于打印语句,已经有很多其他问题,但我没有找到解决我的问题的答案:

当我执行以下操作时:

for idx in range(10):
    print(idx, end="\r")

在(ipython)终端中,它可以直接运行并且始终覆盖前一行。然而,在PyCharm的模块中运行时,我看不到任何输出到标准输出的行。

这是一个已知的PyCharm问题吗?


我认为你不能依赖于"\r"的行为。请参考https://dev59.com/SXI-5IYBdhLWcg3wn525#1761086。 - Mark Perryman
3
你尝试过在结尾时刷新吗?print(..., flush=True) - tobias_k
有趣...但不幸的是它没能帮我。也许还有另一种方法可以在PyCharm中使其工作吗?@tobias_k flush不能帮助;) - HansSnah
我没有PyCharm。你能找出PyCharm正在使用的确切Python版本吗?当在PyCharm中运行import sys; print(sys.version)时,会显示什么? - tobias_k
1
我在Windows 10上使用PyCharm 2018.1社区版,结合采纳的答案和flush=True的组合对我有用。 - Aemyl
显示剩余2条评论
2个回答

33

尝试在您打印的字符串开头添加\r(而不是结尾):

for idx in range(10):
    print('\r', idx, end='')
Carriage return在前面,并以''结尾以避免新行符'\n'。避免空格的一种解决方案是使用格式约定:
for idx in range(10):
    print("'\r{0}".format(idx), end='')

1
是的!第一种解决方案适用于我使用PyCharm和Python3。 - StarSweeper
1
就我个人而言,我无法使其对我起作用。Windows 7,Python 3.6.3,PyCharm 2017.2.4社区版。 - Russ Schultz
在Spyder控制台中出现了同样的问题。在字符串开头添加\r是有效的。谢谢你的提示。 - undefined

8

我曾经遇到过同样的问题。虽然使用print()方法未能解决,但我发现sys.stdout.write方法可以完美解决该问题。(Win10, Python 3.5.1, Pycharm 2016.3.2)

import sys
import time

def countdown(n):
    for x in reversed(range(n)):
        sys.stdout.write('\r' + str(x))
        time.sleep(1)

countdown(60)

就我个人而言,我无法让它在我的电脑上运行。我的电脑是Windows 7系统,使用的是Python 3.6.3版本和PyCharm 2017.2.4社区版。 - Russ Schultz

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