我知道这类问题经常被问到,但我认为这个问题有点不同,需要被问到。
新的 Windows 控制台支持 ANSI (VT100) 控制代码: ANSI/VT100 控制代码 和 Windows 文档:控制代码。
但是,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
只需“向下滚动”以“使屏幕清晰”,内容仍然存在。
这有点难以解释,如果你不明白我的意思,请评论,谢谢!
另一个小问题:为什么cls
command 比ESC[2J
orESC[H
慢ESC[J
?