python3为什么在linux和windowsterminal上print(“\ r”+“text”)不同

在学习python3的同时,我写了一个小程序,在控制台上显示一个ascii艺术条形图。 即时通讯提供一些随机数字这个方法,所以我可以看到如何条形图在行动。 因此我希望它一遍又一遍地打印条形图,而不是添加一个LF。

在Linux控制台上工作正常的不在Windows控制台上。

为什么?! 我怎样才能解决这个任何平台?

for i in range(500): print( "\r" + getProgressBar( progressPercentage=limitedRandGen(), width=consoleWidth ), end="" ) time.sleep(50 / 1000) # delays for x seconds 

在Linux上的这个代码输出同一条线上的每个条形图(覆盖它一遍又一遍,这是很好的)。 在窗口上,每个条形图之后都有一个LF,导致如下所示:

 47% [================================================================================== 45% [============================================================================== 46% [================================================================================= 42% [========================================================================= 38% [================================================================== 40% [====================================================================== 40% [===================================================================== 43% [=========================================================================== 46% [=============================================================================== 50% [======================================================================================= 48% [==================================================================================== 49% [===================================================================================== 46% [================================================================================ 47% [================================================================================= 46% [================================================================================ 43% [========================================================================== 43% [========================================================================== 41% [======================================================================= 45% [============================================================================== 41% [======================================================================= 44% [============================================================================ 42% [========================================================================= 41% [======================================================================== 44% [============================================================================ 46% [================================================================================ 47% [================================================================================== 

注意:getProgressBar()方法只返回一个没有CR + LF的string。

与此同时,我发现,如果某些字符被写入到控制台行的最后一个地方,windows会添加一个LF (就像LF一样)。

所以我的代码无法保持在同一行,直到我减少了打印的宽度至少maxConsoleWidth-1 ,这解决了问题。

以下在Mac OS中正常工作。

 import sys import time import random def getRandomLine(): r = random.randrange(1,20) return str(r) + '% ' + '=' * random.randrange(1,20) for i in range(20): print(getRandomLine().ljust(30) + '\r', end='') sys.stdout.flush() time.sleep(0.5)