1

この種の質問が頻繁に寄せられることは承知していますが、これは少し異なり、尋ねる必要があると思います。

新しい 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「画面をクリアにする」ために「スクロールダウン」するだけで、コンテンツはまだそこにあります。

これは説明するのが少し難しいです、私が何を意味するのか理解できない場合はコメントしてください、ありがとう!

もう 1 つの小さな質問: command がor +clsよりも遅いのはなぜですか?ESC[2JESC[HESC[J

4

1 に答える 1