Как полностью стереть консольный вывод в windows? - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь программно стереть консоль Windows из скрипта NodeJS.Не просто вывести консольный вывод из поля зрения ... Я хочу на самом деле очистить его.

Я пишу инструмент, похожий на команду tsc TypeScript, где он будет смотреть папку и постепенно компилировать проект.Таким образом, при каждом изменении файла я перезапускаю компилятор и выводю все найденные ошибки (по одной строке).Я хотел бы полностью стереть вывод консоли, чтобы пользователи не смущались старыми сообщениями об ошибках при прокрутке консоли.

Когда вы запускаете tsc --watch в каталоге, TypeScript делает именно то, что я хочу.tsc фактически стирает весь вывод консоли.

Я пробовал все следующие вещи:

  • process.stdout.write("\x1Bc");

  • process.stdout.write('\033c')

  • var clear = require('cli-clear'); clear();

  • Я перепробовал все коды выхода из этого поста .

  • process.stdout.write("\u001b[2J\u001b[0;0H");

Все это либо:

  1. Печатает неизвестный символ на консоли

  2. Сдвиньте консоль вниз, что эквивалентно cls, что НЕ то, что я хочу.

Как мне на самом деле очистить экран и удалить ВСЕ извыход?Я открыт для использования модуля узла, отправки по трубопроводу, создания новых cmds, хаков и т. Д., Пока он выполняет свою работу.

Вот пример сценария node.js для проверки проблемы.

for (var i = 0; i < 15; i++) {
    console.log(i + ' --- ' + i);
}
//clear the console output here somehow

1 Ответ

0 голосов
/ 19 февраля 2019

Адаптировано из предыдущего ответа .Вам понадобится компилятор C (протестирован с mingw / gcc)

#include <windows.h>

int main(void){
    HANDLE hStdout; 
    CONSOLE_SCREEN_BUFFER_INFO csbiInfo; 
    COORD destinationPoint;
    SMALL_RECT sourceArea;
    CHAR_INFO Fill;

    // Get console handle
    hStdout = CreateFile( "CONOUT$", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0 );

    // Retrieve console information
    if (GetConsoleScreenBufferInfo(hStdout, &csbiInfo)) {
        // Select all the console buffer as source
        sourceArea.Top = 0;
        sourceArea.Left = 0;
        sourceArea.Bottom = csbiInfo.dwSize.Y - 1;
        sourceArea.Right = csbiInfo.dwSize.X - 1;

        // Select a place out of the console to move the buffer
        destinationPoint.X = 0;
        destinationPoint.Y = 0 - csbiInfo.dwSize.Y;

        // Configure fill character and attributes
        Fill.Char.AsciiChar = ' ';
        Fill.Attributes =  csbiInfo.wAttributes;

        // Move all the information out of the console buffer and init the buffer
        ScrollConsoleScreenBuffer( hStdout, &sourceArea, NULL, destinationPoint, &Fill);

        // Position the cursor
        destinationPoint.X = 0;
        destinationPoint.Y = 0;
        SetConsoleCursorPosition( hStdout, destinationPoint );
    }

    return 0;
}

Скомпилирован как clearConsole.exe (или как угодно), его можно использовать с узла как

const { spawn } = require('child_process');
spawn('clearConsole.exe');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...