我知道经常会问这类问题,但我认为这个问题有点不同,需要提出。
新的Windows控制台支持ANSI(VT100)控制代码: ANSI/VT100 control codes &安培; Windows document: the control codes
然而,ESC[2J
并不是真的"清楚"在屏幕上,它只是向下滚动到"隐藏"印刷内容。只有ESC[H
+ ESC[J
真的"清除"屏幕上当前显示的内容。这是一个错误还是它的目的是为了做到这一点?它写在某种文档上吗?
请运行此.bat
以查看我的意思:
@echo off
echo hello0
echo hello1
echo hello2
echo hello3
echo hello4
echo hello5
echo hello6
echo hello7
echo hello8
echo hello9
pause
echo [2J
pause
echo [H[J
pause
或运行此.py
(Python 2):
import sys
from ctypes import windll
windll.kernel32.SetConsoleMode(windll.kernel32.GetStdHandle(-11), 7)
#set ansi(vt100) control code interpreted
#https://stackoverflow.com/questions/36760127/how-to-use-the-new-support-for-ansi-escape-sequences-in-the-windows-10-console
show = lambda s: sys.stdout.write(s)
for i in range(10):
print("\x1b[30;47m hello \x1b[0m%d"%i)
raw_input()
show("\x1b[2J")
raw_input()
show("\x1b[H\x1b[J")
raw_input()
正如您在运行此简单脚本时所看到的那样,ESC[2J
只需"向下滚动"为了让你的屏幕清晰,#34;内容仍在那里。
这有点难以解释,如果您不明白我的意思,请发表评论,谢谢!
另一个小问题:为什么cls
命令比ESC[2J
或ESC[H
+ ESC[J
慢?
答案 0 :(得分:0)
ESC[2J
的问题在支持控制序列的旧版Windows中“已知”。也就是说,应该,但没有清除整个屏幕。你可能会发现一些最近的评论。没有人真正测试过最近恢复的Windows控制序列,以指出与其他终端的兼容性。
控制台窗口有一个“缓冲区”,其中包含可见字符加上回滚,cls
完全清除,可能比清除可见字符花费的时间更长。