我正在尝试通过NodeJS脚本以编程方式擦除Windows控制台。不仅仅是将控制台输出滑出视线...我实际上想清除它。
我正在编写一个与TypeScript的tsc
命令类似的工具,该工具将监视一个文件夹并逐步编译该项目。这样,每次更改文件时,我都会重新运行编译器,并输出发现的错误(每行一行)。我想完全擦除控制台输出,以便用户在向上滚动控制台时不会被旧的错误消息所迷惑。
当您在目录中运行tsc --watch
时,TypeScript会完全满足我的要求。 tsc
实际上会擦除整个控制台输出。
我尝试了以下所有操作:
process.stdout.write("\x1Bc");
process.stdout.write('\033c')
var clear = require('cli-clear'); clear();
我尝试了this post中的所有转义代码。
process.stdout.write("\u001b[2J\u001b[0;0H");
所有这些:
在控制台上打印了一个未知的字符
向下滑动控制台,相当于cls
,这不是我想要的。
我如何真正清除屏幕并删除所有输出?我愿意使用节点模块,管道输出,产生新的cmds,hacks等,只要它能完成工作即可。
这是一个示例node.js脚本,用于测试问题。
for (var i = 0; i < 15; i++) {
console.log(i + ' --- ' + i);
}
//clear the console output here somehow
答案 0 :(得分:0)
从previous answer改编而成。您将需要一个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');