node.js stdout clearline()和cursorTo()函数

tro*_*gne 26 node.js

从node.js教程中,我看到了这两个process.stdout函数:

process.stdout.clearLine();
process.stdout.cursorTo(0);
Run Code Online (Sandbox Code Playgroud)

但我使用的是更新的node.js版本(4.2.4),并且这些功能不存在.我得到的process.stdout.clearLine is not a functionprocess.stdout.cursorTo is not a function.

node.js版本4.2.4上clearLine和cursorTo的等价物是什么?

编辑:

这些都不起作用:

process.readline.clearLine();
process.readline.cursorTo(0);

function writeWaitingPercent(p) {
    process.readline.clearLine();
    process.readline.cursorTo(0);
    process.stdout.write(`waiting ... ${p}%`);
}
Run Code Online (Sandbox Code Playgroud)

我明白了 Cannot read property 'clearLine' of undefined

tro*_*gne 37

这是解决方案:

首先,要求readline:

var readline = require('readline');
Run Code Online (Sandbox Code Playgroud)

然后,像这样使用cursorTo:

function writeWaitingPercent(p) {
    //readline.clearLine(process.stdout);
    readline.cursorTo(process.stdout, 0);
    process.stdout.write(`waiting ... ${p}%`);
}
Run Code Online (Sandbox Code Playgroud)

我已经评论过clearLine,因为它在我的情况下是无用的(cursorTo将光标移回到开头)

  • 我有同样的问题.当它从终端运行时它起作用,当我从WebStorm运行时,我需要使用readline并使用你的方法.这是为什么? (4认同)
  • 因为当`process.stdout`不是tty时,`clearLine`和`cursorTo`是未定义的.并且WebStorm中的Node/NPM控制台是非Tty的,因为节点进程是通过输入/输出流重定向启动的.请参阅https://youtrack.jetbrains.com/issue/WEB-1933. (4认同)
  • 如果您不使用“clearLine”并且需要编写一个长度小于最后输出的字符串,您仍然会看到从末尾开始的剩余部分。 (2认同)

Ima*_*tit 19

的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)
}
Run Code Online (Sandbox Code Playgroud)

以前的代码将转换为以下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);
}
Run Code Online (Sandbox Code Playgroud)

作为替代方案,您可以将以下代码用于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)
}
Run Code Online (Sandbox Code Playgroud)

  • 对我不起作用,它总是附加并且不会清除 webstorm 中的行。 (4认同)

Mak*_*lau 6

如果您看到 stdout 异常,例如TypeError: process.stdout.clearLineVisual Studio Code(或 Webstorm)的“调试控制台”窗口中不是一个函数,请将该应用程序作为外部终端应用程序而不是内部控制台运行。原因是调试控制台窗口不是 TTY(process.stdout.isTTY为 false)。launch.json因此,请使用选项更新您的启动配置"console": "externalTerminal"