【问题标题】:Input of Information into Javascript using terminal使用终端将信息输入 Javascript
【发布时间】:2015-05-11 08:40:12
【问题描述】:

我想获取 c++ 程序的输出并将其输入到 javascript 文件的标准输入中。但是我无法使用该方法将任何内容推送到标准输入中......

node example.js < test.txt

因为我收到以下错误。

example.js:35

stdin.setRawMode(true);

TypeError: undefined is not a function

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

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

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

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

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

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

在启动时 (node.js:129:16)

在 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

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

【问题讨论】:

  • 你在什么平台/操作系统上?
  • osx 10.10 虽然我也希望它在树莓派上工作
  • 实际上,从头开始。重定向标准输入时我看到了相同的行为。进一步调查。

标签: javascript node.js terminal


【解决方案1】:

这就是我在 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(旧式流)已被弃用。

【讨论】:

    【解决方案2】:

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

    setRawMode() 用于设置 tty 流,使其不以任何方式处理其数据,例如提供对换行的特殊处理。这种处理过的数据被称为“熟”。

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

    因此,无需调用 setRawMode() 即可重构您的代码,它应该可以正常工作。

    【讨论】:

      猜你喜欢
      • 2023-02-05
      • 1970-01-01
      • 2014-12-21
      • 2022-10-08
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 2022-11-26
      • 1970-01-01
      相关资源
      最近更新 更多