我知道这类问题经常被问到,但我认为这个问题有点不同,需要被问到。
新的 Windows 控制台支持 ANSI (VT100) 控制代码:ANSI/VT100 控制代码 http://www.termsys.demon.co.uk/vtansi.htm
&
Windows 文档:控制代码 https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences.
然而,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
命令比ESC[2J
or ESC[H
+ESC[J
?
问题与ESC[2J
在支持控制序列的旧版本 Windows 中“已知”。也就是说,它应该但没有清除整个屏幕。您可能会发现一些最近的评论。没有人真正测试过最近恢复的 Windows 控制序列来指出与其他终端的兼容性。
控制台窗口有一个保存可见字符的“缓冲区”plus回滚,其中cls
完全清除,可能比仅清除可见字符花费更多时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)