Windows 控制台 "ESC[2J" 并不是真正的 "clear" 屏幕
Windows console "ESC[2J" doesn't really "clear" the screen
我知道这类问题经常被问到,但我认为这个有点不同,需要被问到。
新的 Windows 控制台支持 ANSI (VT100) 控制代码:
ANSI/VT100 control codes
&
Windows document: the control codes.
但是,ESC[2J
并不是真正的 "clear" 屏幕,它只是向下滚动到 "hide" 打印的内容。只有ESC[H
+ESC[J
真正"clears"当前显示在屏幕上的内容。这是一个错误还是旨在执行此操作?它是写在某种文档上的吗?
请运行这个.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
#
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
只是 "scrolls down" 到 "make your screen clear",内容仍然存在。
这个有点难解释,不明白的请指正,谢谢!
另一个小问题:为什么cls
命令比ESC[2J
或ESC[H
+ESC[J
慢?
ESC[2J
的问题是 "known" 在支持控制序列的 Windows 旧版本中。也就是说,它应该,但没有清除整个屏幕。你可能会发现一些最近的评论。没有人实际测试最近恢复的 Windows 控制序列以指出与其他终端的兼容性。
控制台 window 有一个 "buffer" 保存可见字符 加上 回滚,cls
完全清除,大概需要更多时间而不是只清除可见字符。
我知道这类问题经常被问到,但我认为这个有点不同,需要被问到。
新的 Windows 控制台支持 ANSI (VT100) 控制代码: ANSI/VT100 control codes & Windows document: the control codes.
但是,ESC[2J
并不是真正的 "clear" 屏幕,它只是向下滚动到 "hide" 打印的内容。只有ESC[H
+ESC[J
真正"clears"当前显示在屏幕上的内容。这是一个错误还是旨在执行此操作?它是写在某种文档上的吗?
请运行这个.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
#
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
只是 "scrolls down" 到 "make your screen clear",内容仍然存在。
这个有点难解释,不明白的请指正,谢谢!
另一个小问题:为什么cls
命令比ESC[2J
或ESC[H
+ESC[J
慢?
ESC[2J
的问题是 "known" 在支持控制序列的 Windows 旧版本中。也就是说,它应该,但没有清除整个屏幕。你可能会发现一些最近的评论。没有人实际测试最近恢复的 Windows 控制序列以指出与其他终端的兼容性。
控制台 window 有一个 "buffer" 保存可见字符 加上 回滚,cls
完全清除,大概需要更多时间而不是只清除可见字符。