使用终端将信息输入 Javascript

Input of Information into Javascript using terminal

我想获取 C++ 程序的输出并将其输入到 javascript 文件的标准输入中。但是我一直无法使用方法将任何东西推入标准输入...

node example.js < test.txt

因为我得到以下错误。

example.js:35

stdin.setRawMode( true );

TypeError: undefined is not a function

at Object. (example.js:35:7)

at Module._compile (module.js:460:26)

at Object.Module._extensions..js (module.js:478:10)

at Module.load (module.js:355:32)

at Function.Module._load (module.js:310:12)

at Function.Module.runMain (module.js:501:10)

at startup (node.js:129:16)

at node.js:814:3

违规代码如下所示。在正常输入时它工作正常,但在上述情况下崩溃。

var stdin = process.stdin;
stdin.setRawMode( true );
stdin.resume();
stdin.setEncoding( 'utf8' );
stdin.on( 'data', function( key ){
//do stuff based upon input

有没有人遇到过这个问题,或者有什么解决办法?或者解决这个问题的另一种方法?

这就是我在 Node 中处理来自 STDIN 的数据的方式:

function readStream(stream, callback) {
  var data = '';
  stream.setEncoding('utf-8');
  stream.on('data', onData);
  stream.on('end', onEnd);

  function onData(chunk) {
    data += chunk;
  }

  function onEnd() {
    stream.removeListener('end', onEnd);
    stream.removeListener('data', onData);
    callback(data);
  }
}

您问题中的错误消息("undefined is not a function")错误意味着您试图在 stdin 上调用一个不存在的方法。我在文档的粗略扫描中找不到 setRawMode 的提及。也许您使用的是过时的 API?我记得必须取消暂停 STDIN(旧式流)已被弃用。

当 运行 您的程序使用重定向标准输入时,您连接到 ReadStream,而不是 TTY,因此 TTY.setRawMode() 不受支持。

setRawMode() 用于设置 tty 流,使其不以任何方式处理其数据,例如提供换行符的特殊处理。此类处理后的数据被称为 "cooked".

根据定义,标准节点 ReadStreams 已经 "raw" 因为没有对数据进行特殊处理。

因此,在不调用 setRawMode() 的情况下重构您的代码,它应该可以正常工作。