【发布时间】:2016-04-13 21:40:27
【问题描述】:
我正在按照How to animate the command line? 的建议编写进度条。我使用 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)
但是,如果我运行此 .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)
我现在有 2 个问题:
为什么 stdout 有效,而 print() 无效。
为什么How to animate the command line? 建议将
\r附加到末尾,而我必须在开头写它?
【问题讨论】:
-
在交互式解释器中对我来说很好。你是否有机会在一个奇怪的 shell 中运行,比如 IDLE shell?
-
@ShadowRanger 我正在使用 Pycharm 的运行工具窗口运行它。如果我没有通过
end='\r',它会正常打印。但我想继续更新同一行。 -
是的,PyCharm 的运行窗口不是一个普通的终端。它不会以您可能想要的方式处理回车。在正常的命令提示符下运行。
-
嗯...如果可行,Jorge 可能是对的; PyCharm 必须在回车时擦除。
print会起作用,但你会这样做:print('\rTime Remaining: %d' % time_delta, end='', flush=True)代替(所以回车首先打印,而不是最后打印)。 -
@ShadowRanger 是的,它有效!必须通过
end=''否则它也不起作用。
标签: python pycharm python-3.4