Node.js stdout clearline() и функции cursorTo()
Из учебника node.js я вижу две функции process.stdout:
process.stdout.clearLine();
process.stdout.cursorTo(0);
Но я использую более новую версию node.js(4.2.4), и эти функции не существуют. Я получаю process.stdout.clearLine is not a function
и process.stdout.cursorTo is not a function
.
Что эквивалентно clearLine и cursorTo на node.js версии 4.2.4?
ИЗМЕНИТЬ:
Те также не работают:
process.readline.clearLine();
process.readline.cursorTo(0);
function writeWaitingPercent(p) {
process.readline.clearLine();
process.readline.cursorTo(0);
process.stdout.write(`waiting ... ${p}%`);
}
Я получаю Cannot read property 'clearLine' of undefined
Ответы
Ответ 1
Это решение:
Во-первых, требуется readline:
var readline = require('readline');
Затем используйте cursorTo следующим образом:
function writeWaitingPercent(p) {
//readline.clearLine(process.stdout);
readline.cursorTo(process.stdout, 0);
process.stdout.write(`waiting ... ${p}%`);
}
Я прокомментировал clearLine, так как это бесполезно в моем случае (cursorTo переместить курсор к началу)
Ответ 2
Модуль Readline, который является частью Node.js, теперь предоставляет методы readline.cursorTo(stream, x, y)
, readline.moveCursor(stream, dx, dy)
и readline.clearLine(stream, dir)
.
С TypeScript ваш код должен выглядеть следующим образом:
import * as readline from 'readline'
// import readline = require('readline') also works
/* ... */
function writeWaitingPercent(p: number) {
readline.clearLine(process.stdout, 0)
readline.cursorTo(process.stdout, 0, null)
let text = `waiting ... ${p}%`
process.stdout.write(text)
}
Предыдущий код перейдет в следующий код Javascript (ES6):
const readline = require('readline');
/* ... */
function writeWaitingPercent(p) {
readline.clearLine(process.stdout, 0);
readline.cursorTo(process.stdout, 0, null);
let text = `waiting ... ${p}%`;
process.stdout.write(text);
}
В качестве альтернативы вы можете использовать следующий код для Javascript (ES6):
const readline = require('readline');
/* ... */
function waitingPercent(p) {
readline.clearLine(process.stdout, 0)
readline.cursorTo(process.stdout, 0)
let text = `waiting ... ${p}%`
process.stdout.write(text)
}
Ответ 3
если вы видите, что исключения stdout, такие как TypeError: process.stdout.clearLine
не являются функцией в окне консоли отладки кода Visual Studio (или Webstorm), запустите приложение как приложение внешнего терминала вместо внутренней консоли. Причина в том, что окно консоли отладки не TTY (process.stdout.isTTY
является ложным). Поэтому обновите конфигурацию запуска в launch.json
с опцией "console": "externalTerminal"
.
Ответ 4
process.readline.cursorTo и process.readline.clearLine
Node v4.2.4 Документация