python - 终端python 2.7上同一位置的动态更新文本
问题描述
我的程序是用 Python 2.7 编写的,我想做一个动态更新。输出是表格视图,有数百个字符。我在这里找到了一个非常好的答案,但是,它粉碎了 100 多个字符(如文章中所承诺的那样)。此外,我不知道表格有多少行,它是动态变化的。此外,我不想使用诅咒,因为我希望输出在控制台中内联,就像运行“常规”命令一样
输出示例:
+------+--------------+-------------+
| Type | IP Address | Status |
+------+--------------+-------------+
| aa | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
| cccc | 10.11.10.10 | in Progress |
| aa | 10.11.10.10 | in Progress |
| aa | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
| cccc | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
+------+--------------+-------------+
我试图避免:
+------+--------------+-------------+
| Type | IP Address | Status |
+------+--------------+-------------+
| aa | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
| cccc | 10.11.10.10 | in Progress |
| aa | 10.11.10.10 | in Progress |
| aa | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
| cccc | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
+------+--------------+-------------+
+------+--------------+-------------+
| Type | IP Address | Status |
+------+--------------+-------------+
| aa | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
| cccc | 10.11.10.10 | in Progress |
| aa | 10.11.10.10 | in Progress |
| aa | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
| cccc | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
+------+--------------+-------------+
+------+--------------+-------------+
| Type | IP Address | Status |
+------+--------------+-------------+
| aa | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
| cccc | 10.11.10.10 | in Progress |
| aa | 10.11.10.10 | in Progress |
| aa | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
| cccc | 10.11.10.10 | in Progress |
| bb | 10.11.10.10 | in Progress |
+------+--------------+-------------+
解决方案
您可以使用 ANSI 代码向上移动多行。它应该在linux中工作:
import time
import sys
for i in range(0, 100):
# print 4 lines
print ("line 1\nline 2\nline 3")
print (str(i))
time.sleep(0.2)
sys.stdout.write("\033[4A") # go up 4 lines
它适用于某些终端。它在 Windows 腻子中工作。如果您在腻子终端中返回多于行数,它不会让您向上滚动文本,它会将光标移动到第一个可见行。ANSII 代码的来源。
推荐阅读
- python - 如何通过在python中排名将变量排序到其他变量中
- c++ - 将二维数组中的值输出到文本文件
- r - 如何平衡不平衡的面板数据?
- xml - 使用 Xpath 通配符获取所有标题字符串
- python - 通过python3从mysql获取数据
- c - 使用管道文件传输名称
- java - 我的 android 应用程序在尝试 10 次后崩溃
- javascript - 扩展/修补 HTMLScriptElement.prototype.attributes
- reactjs - 如何在反应框架中使用 mgt-people-picker
- java - 即使存在事件处理程序,javafx 控制器也没有对事件执行任何操作