使用终端将信息输入到Javascript中

Input of Information into Javascript using terminal

本文关键字:Javascript 输入 信息 终端      更新时间:2023-09-26

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

node example.js < test.txt

因为我收到以下错误。

示例.js:35

stdin.setRawMode( true );

类型错误:未定义不是函数

在对象。(例.js:35:7)

在Module._compile(模块.js:460:26)

在Object.Module._extensions..JS(模块.js:478:10)

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

在Function.Module._load(模块.js:310:12)

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

启动时(节点.js:129:16)

在节点.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

有没有人遇到过这个问题,或者关于如何解决它的任何想法?还是解决这个问题的另一种方法?

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

setRawMode() 用于设置 tty 流,以便它不会以任何方式处理其数据,例如提供换行的特殊处理。此类处理后的数据称为"煮熟"。

根据定义,标准节点 ReadStream 已经是"原始"的,因为没有对数据进行特殊处理。

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

这是我在 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);
  }
}

问题中的错误消息("未定义不是函数")错误表示您尝试在不存在的stdin上调用方法。我在粗略扫描文档中找不到提及setRawMode的内容。也许您正在使用过时的 API?我记得必须取消暂停 STDIN(旧式流)已被弃用。