保持状态始终位于终端的底部

时间:2018-05-10 02:53:49

标签: python python-3.x

我尝试搜索这个,但我无法找到我想要的东西,所以就这样了。

我正在研究python图像搜索程序。该数据库在112个文件夹中有超过1万个图像,因此查找目标图像需要相当长的时间。在终端中,我希望状态始终位于页面底部。这就是它在终端中的样子。

Finished going through folder 001
Finished going through folder 002
Finished going through folder 003
Finished going through folder 004
Finished going through folder 005
Finished going through folder 006
---------------------------------
STATUS uptime: 10:12, 6/112

当它完成文件夹007时,它看起来像这样

Finished going through folder 001
Finished going through folder 002
Finished going through folder 003
Finished going through folder 004
Finished going through folder 005
Finished going through folder 006
Finished going through folder 007
---------------------------------
STATUS uptime: 11:14, 7/112

有关如何执行此操作的任何建议吗?

2 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点。

最常见的方法是使用TUI库实现此目的,如cursesasciimatics

另外一个非常简单的解决方案是清除终端屏幕并重新打印整个日志:

import os 

screen = []
footer = 'foobar'
for i in range(10):
    msg = f'this is {i}'
    screen.append(msg)
    os.system('clear') 
    print('\n'.join(screen + [footer]))

答案 1 :(得分:0)

您可以将退格键'\b'打印到控制台以向后移动光标。

为电传打字机制作ASCII控制代码。请注意,这不会删除字符,只是让您覆盖它们。因此,您必须打印'\b \b'(后退一个,用空格覆盖,再返回)以获得您在文本编辑器中习惯的退格行为。

您还可以打印回车'\r'以将光标移动到第一列。同样,您必须覆盖您想要更改的任何内容。这意味着你想重写整行。

试试吧。

>>> import time
>>> print('The quick brown fox.', end='\r'); time.sleep(3); print('jumped!')
jumped!ck brown fox.

您可以使用空格填充以确保您的状态行始终为80,使用foo.ljust(80) + '\r'表示任何字符串foo。您还可以在格式字符串中设置宽度。 '{:80}\r'.format(foo)