\ r即使在进行另一次打印后也将打印时间保持在同一行上

问题描述 投票:0回答:1

i有一个线程,它每1秒计算一次时间以获取经过的总时间。这很好用,但即使打印另一行,我也需要使其保持在同一行上。当前正在这样做:

[~] 00:00:02
ok #this is a test print to see if it stays on the same line and of course it dosen't.
[~] 00:00:08
def total_elapsed_time(start):
    while True:
        elapsed_time = time.time() - start
        print(colorama.Fore.LIGHTBLUE_EX + "[~] " + time.strftime("%H:%M:%S", time.gmtime(elapsed_time)), end="\r")
        time.sleep(1) #updates every second

这是我的代码。香港专业教育学院一直在读关于\ r \ n和\ r \ n和\ r做这项工作的一部分,但我仍然需要它始终保持在同一行。我不确定这是否可能,尽管我已经看过其他语言了,所以我认为是。

python python-3.x printing newline
1个回答
0
投票

您可以使用\r重写最底行。

如果要在时间戳上方“打印其他内容(例如”确定”):

  • 首先用时间戳删除底行(如果下一行不够长,则可能必须用空格覆盖,然后再次使用\r),然后
  • 打印另一件事(“确定”,然后]
  • 在新行下再次在其下面写入时间戳。

例如,

>>> from datetime import datetime
>>> import time
>>> for c in 'abcdefg':
...   print(datetime.now(), end='\r')  # timestamp
...   time.sleep(1)
...   print(' '*80, end='\r')  # overwrite timestamp line with spaces
...   print(c)  # print something else "above" the next timestamp
...
a
b
c
d
e
f
g
>>>

最终结果没有时间戳,但是您可以在循环时看到它。试试吧。

如果不从头开始滚动到底部,则时间戳记行将“移动”,但是一旦您打印了足够的行以填充终端,则底部行将保留在底部。您还可以使用它来显示进度条和微调器以及类似的内容。

还请注意,您可以使用退格字符来备份一个字符,而不必使用回车键来备份到行首。

© www.soinside.com 2019 - 2024. All rights reserved.