Python3:print(somestring,end ='\ r',flush = True)没有显示任何内容

spa*_*ing 5 python pycharm python-3.4

我正在编写一个进度条,如何为命令行设置动画?提示.我使用Pycharm并在运行工具窗口中运行此文件.

import time
def show_Remaining_Time(time_delta):
    print('Time Remaining: %d' % time_delta, end='\r', flush=True)

if __name__ == '__main__':
    count = 0
    while True:
        show_Remaining_Time(count)
        count += 1
        time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

但是,如果我运行此.py文件,代码将不显示任何内容.我究竟做错了什么?


我试过Jogger的建议,但是如果我使用print函数它仍然无法正常工作.

但是,以下脚本按预期工作.

import time
import sys
def show_Remaining_Time(time_delta):
    sys.stdout.write('\rtime: %d' % time_delta) # Doesn't work if I use 'time: %d\r'
    sys.stdout.flush()
if __name__ == '__main__':
    count = 0
    while True:
        show_Remaining_Time(count)
        count += 1
        time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

我现在有两个问题:

  1. 为什么stdout工作但print()没有.

  2. 为什么如何设置命令行的动画?建议追加\r到最后我必须在我的情况下开始写它?

Jor*_*res 5

问题是末尾的 '\r' 清除了您刚刚打印的行,那怎么样?

import time
def show_Remaining_Time(time_delta):
    print("\r", end='')
    print('Time Remaining: %d' % time_delta, end='', flush=True)

if __name__ == '__main__':
    count = 0
    while True:
        show_Remaining_Time(count)
        count += 1
        time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您首先清除该行,然后打印所需的显示,并在睡眠期间将其保留在屏幕上。

注意:上面的代码已修改为添加end=''注释中的建议,以便代码在某些平台上正常工作。感谢其他读者帮助制作更完整的答案。

  • 在大多数终端上,我知道 `\r` 不会清除任何内容。它移动光标,但需要进一步的输出来覆盖那里的内容。此外,您没有禁用任何打印的自动换行,因此最终效果是在新行上打印每个输出;显式的 `'\r'` `print` 什么都不做。 (2认同)